hdu 5154 拓扑排序 判有没有环

来源:互联网 发布:python intertools 编辑:程序博客网 时间:2024/04/28 06:00
#include<bits/stdc++.h>using namespace std;int indegree[300];int g[300][300];int main(){   int n,k;    while(~scanf("%d%d",&n,&k))    {        memset(indegree,0,sizeof(indegree));        memset(g,0,sizeof(g));        for(int i=0;i<k;i++)        {            int a,b;            scanf("%d%d",&a,&b);            indegree[b]++;            g[a][b]++;        }        int sum=n;        queue<int>q;        for(int i=1;i<=n;i++)        {            if(indegree[i]==0)            {               q.push(i);            }        }        while(!q.empty())        {            int f=q.front();            q.pop();            sum--;            for(int i=1;i<=n;i++)            {                if(g[f][i])                {                    indegree[i]-=g[f][i];                    g[f][i]=0;                    if(indegree[i]==0)                    {                        q.push(i);                    }                }            }        }        if(sum==0)        printf("YES\n");        else printf("NO\n");    }}