HDU 3342 Legal or Not【拓扑排序】
题意: 给出一些人的名次关系,问存不存在冲突的情况。
分析: 这题其实就是判断拓扑排序的过程中是否会出现环,判断环的方法是: 在某一次排序的过程中找不到入度为 0 的点,即说明有环。
PS: 重边 需要考虑...
#include<cstdio> #include<cstring> #define clr(x)memset(x,0,sizeof(x)) int g[102][102]; int indegree[102]; int main() { int i,j,k,n,m,a,b; bool flag; while(scanf("%d%d",&n,&m),n&&m) { clr(indegree); clr(g); while(m--) { scanf("%d%d",&a,&b); if(!g[a][b]){ g[a][b]=1; indegree[b]++; } } for(i=0;i<n;i++) { flag=true; for(j=0;j<n;j++) if(indegree[j]==0) { indegree[j]=-1; flag=false; for(k=0;k<n;k++) if(g[j][k]) indegree[k]--; break; } if(flag) break; } printf("%s\n",flag?"NO":"YES"); } return 0; }