86分,第五个点过不去,还不能下样例,求助

B3644 【模板】拓扑排序 / 家谱树

tiangongyuanv @ 2024-08-14 14:26:34

#include<bits/stdc++.h>
using namespace std;

struct edge
{
    int head=0,tail[105]={},cnt=1;
};

edge e[200];

int a[200];

bool vis[200];

int main()

{

    int n;
    cin>>n;
    if(n==1)
    {
        int x;
        cin>>x;
        cout<<x;
        return 0;
    }
    for(int i=1;i<=n;i++)
    {
        int x[10086],j=1;
        while(cin>>x[j])
        {
            if(x[j]==0)
            {
                if(j==1)
                    a[105]=i;
                break;
            }
            e[x[j]].head++;
            e[i].tail[e[i].cnt]=x[j];
            e[i].cnt++;
            j++;
        }
    }
    int p;
    for(int i=1;i<=n;i++)
    {
        if(e[i].head==0&&!vis[i])
        {
            vis[i]=1;
            cout<<i<<" ";
            p=i;
            for(int d=1;d<=e[i].cnt;d++)
                e[e[i].tail[d]].head--;
            i=1;
        }
    }
    if(p!=a[105])
        cout<<a[105];
    return 0;
}

by Disconnected_ @ 2024-08-16 16:27:31

已AC

第55行的i=1改为i=0 , 不然for循环又会给i++ , i就会从2开始枚举到n , 把1漏了就错了。

还有p和a[105]这两个变量没意义 , 关于它们的要删了


by Disconnected_ @ 2024-08-19 11:08:04

@tiangongyuanv


by tiangongyuanv @ 2024-08-19 14:28:08

@Disconnected_ 谢谢


|