拓扑排序

来源:互联网 发布:金蝶kis 引出数据失败 编辑:程序博客网 时间:2024/06/07 22:11

HDU3342

#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#include<vector>#include<queue>using namespace std;int N,M;vector<int>  G[105];int Count[105];int ans[105],pos;int first[105];void TopoSort(){            queue<int>  q;            pos=0;            for(int i=0;i<N;i++)            {                    if(Count[i]==0)q.push(i);            }            if(q.empty())return ;            memset(ans,0,sizeof(ans));            while(!q.empty())            {                    int u=q.front(); q.pop();                    ans[pos++]=u;                    int d=G[u].size();                    for(int i=0;i<d;i++)                    {                            int t=G[u][i];                            if(--Count[t]==0)q.push(t);                    }            }}int main(){        while(~scanf("%d%d",&N,&M))        {                if(N==0 && M==0)break;                for(int i=0;i<N;i++)                    G[i].clear();                memset(Count,0,sizeof(Count));                int u,v;                for(int i=0;i<M;i++)                {                        scanf("%d%d",&u,&v);                        G[u].push_back(v);                        Count[v]++;                }                TopoSort();                 if(pos==N)printf("YES\n");                 else printf("NO\n");        }        return 0;}


0 0