poj 2367 拓扑排序

传送门

题意:我表示没看完,看输入输出就猜出意思了。

思路:根据拓扑排序随便输出可行序列。

#include
#include
#include
#include
using namespace std;
int n,fst[105],next[10000],node[10000];
int en,in[105],ans[105],num;
void add(int u,int v)
{
    next[en]=fst[u];
    fst[u]=en;
    node[en]=v;
    en++;
}
void topsort()
{
    queueq;
    for(int i=1;i<=n;i++)
    {
        if(in[i]==0)q.push(i);
    }
    while(!q.empty())
    {
        int u=q.front();
        ans[num++]=u;
        q.pop();
        for(int i=fst[u];i!=-1;i=next[i])
        {
            int v=node[i];
            in[v]--;
            if(in[v]==0)q.push(v);
        }
    }
}
int main()
{
    int u,v;
    en=0;
    num=0;
    memset(in,0,sizeof(in));
    memset(fst,-1,sizeof(fst));
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        while(scanf("%d",&u))
        {
            if(u==0)break;
            add(i,u);
            in[u]++;
        }
    }
    topsort();
    printf("%d",ans[0]);
    for(int i=1;i


你可能感兴趣的:(acm)