和5154一模一样,不想说什么
#include<iostream> #include<queue> #include<vector> #define maxn 100+10 using namespace std; int n,m; int head[maxn]; vector<vector<int> >mapp; void topo() { queue<int>root; for(int i=0;i<n;i++) { if(!head[i]) root.push(i); } int t=0; while(root.size()) { int x=root.front(); root.pop(); t++; for(int i=0;i<mapp[x].size();i++) { head[mapp[x][i]]--; if(!head[mapp[x][i]]) root.push(mapp[x][i]); } } if(t==n) cout<<"YES"<<endl; else cout<<"NO"<<endl; } int main() { while(cin>>n>>m&&n) { mapp.resize(n+1); for(int i=0;i<n+1;i++) head[i]=0,mapp[i].clear(); while(m--) { int x,y; cin>>x>>y; mapp[x].push_back(y); head[y]++; } topo(); } return 0; }
原文:http://blog.csdn.net/zafkiel_nightmare/article/details/45046403