Oi_oier 2021-08-23 23:25 采纳率: 83.3%
浏览 13
已结题

#拓扑排序#有哪位BIG佬知道为什么会Segmentaition faultQAQ

题目描述
小 void有 N 头奶牛,每头奶牛有个挤奶的时间;且某两头奶牛有挤奶顺序,即:x ,y,则只有在奶牛 x 挤完奶时,才能挤奶牛 y。现在给定 NN头奶牛的挤奶时间,及 M对先后关系,求 N 头奶牛都挤完奶的最早时间。

输入格式
第一行为两个空格隔开的整数 N 和 M。
以下 N 行,第 i+1行表示第 i头奶牛的挤奶时间 T
以下 M 行,每行两个整数 x,y,表示奶牛 x在奶牛 y之前挤奶。保证关系无环,即保证有解。

输出格式
输出共一行一个整数 Ret,N头奶牛都挤完奶的最早时间。

样例输入
3 1
10
5
6
3 2
样例输出
11
样例分析
先挤奶牛 1和 3,第 6 秒时,奶牛 3 挤完了;接着挤奶牛 1 和 2,第 10 秒时,奶牛 1 挤完了,第 11 秒时,奶牛 2 也挤完了。

数据范围
对于30% 的数据:1≤N≤100,1≤M≤50;
对于 100% 的数据:1≤N≤10,000,1≤M≤50,000, 1≤T,i≤100,000。
我的代码QAQ

#include<bits/stdc++.h>
using namespace std;
int chu[10005][10005],t[10005],cen=0,gg[10005],n,m,gen[10005];
int milk(int u)//更新
{
    int ans=0;
    if(!chu[u])
    return t[u];
    else
    for(int i=1;i<=chu[u][0];i++)
    {
        if(!gen[chu[u][i]])//如果没有更新就更新
        {
            gen[chu[u][i]]=1;
            t[chu[u][i]]=milk(chu[u][i]);
        }
        ans=max(ans,t[chu[u][i]]);
    }
    t[u]+=ans;
    gen[u]=1;//标为已更新
    return t[u];
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
      cin>>t[i];
    for(int i=1;i<=m;i++)
    {
        int a,b;
        cin>>b>>a;
        chu[a][0]++;
        chu[a][chu[a][0]]=b;//存之前的牛
    }
    for(int i=1;i<=n;i++)
    {
        if(!gen[i])//如果已经更新就不需要更新
        milk(i);
    }
    for(int i=1;i<=n;i++)
    {
        cen=max(cen,t[i]);
    }
    cout<<cen<<endl;
    return 0;
}

  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月23日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改