打的这个拓扑怎么第二个点和最后一个点WA了,看着没错阿
查看原帖
打的这个拓扑怎么第二个点和最后一个点WA了,看着没错阿
398504
lzm15096067472楼主2021/11/10 22:17
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>

using namespace std;
int h[10010],e[10010],ne[10010],idx;
int len[10010],ans[10010],d[10010];
queue<int> q;
void add(int a,int b)
{
    e[idx]=b;
    ne[idx]=h[a];
    h[a]=idx++;
}
int main()
{
    int n;
    cin>>n;
    memset(h,-1,sizeof(h));
    for(int i=1;i<=n;i++)
    {
        int s,cost;
        cin>>s>>cost;
        len[i]=cost;
        while(1)
        {
            int a;
            cin>>a;
            if(!a) break;
            else add(a,i);d[i]++;
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(!d[i]) {q.push(i);ans[i]=len[i];}
    }
    while(!q.empty())
    {
        int t=q.front();
        for(int i=h[t];i!=-1;i=ne[i])
        {
            int j=e[i];
            d[j]--;
            ans[j]=max(ans[j],ans[t]+len[j]);
            if(d[j]==0)
                q.push(j);
        }
        q.pop();
    }
    int sum=0;
    for(int i=1;i<=n;i++)
        sum=max(sum,ans[i]);
        cout<<sum;
 return 0;
}
2021/11/10 22:17
加载中...