1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
#include<vector> #include<cstdio> #include<queue> #define maxv 1010 using namespace std; vector<int> G[maxv]; vector<int> res; int n,m,inDegree[maxv],num=0; bool (){ num=0; priority_queue<int, vector<int>,greater<int>> q; for(int i=0;i<n;i++){ if(inDegree[i]==0){ q.push(i); } } while(!q.empty()){ int u = q.top(); res.push_back(u); q.pop(); for(int i=0;i<G[u].size();i++){ int v=G[u][i]; inDegree[v]--; if(inDegree[v]==0){ q.push(v); } } num++; } if(num==n) return true; else return false; } int main(){ for(int i=0;i<maxv;i++){ inDegree[i]=0; } cin>>n>>m; for(int i=0;i<m;i++){ int a,b; scanf("%d%d",&a,&b); G[a].push_back(b); inDegree[b]++; } if(ts()){ cout<<"YES"<<endl; int i; for(i=0;i<res.size()-1;i++){ cout<<res[i]<<" "; } cout<<res[i]; }else{ cout<<"NO"<<endl; cout<<n-num; } }
|
近期评论