好久没切题 先上水题!
拓扑排序!
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int g[105][105]; int d[105]; int N,M; bool Topsort() { for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { if(g[i][j]==1) { d[j]++; } } } for(int i=0;i<N;i++) { int j; for(j=0;j<N;j++) { if(d[j]==0) { break; } } if(j==N) { return false; } else { d[j]=-1; for(int k=0;k<N;k++) { if(g[j][k]==1) d[k]--; } } } return true; } int main() { while(scanf("%d%d",&N,&M)&&N) { memset(g,0,sizeof(g)); memset(d,0,sizeof(d)); for(int i=0;i<M;i++) { int x,y; scanf("%d%d",&x,&y); g[x][y]=1; } if(Topsort()) { printf("YES "); } else { printf("NO "); } } }