#include "cstdio" #include "vector" using namespace std; vector <int> G[1000005]; int n,m,a,b,k,z,wyn,pom,sum,parent[1000005],ile[1000005]; bool odw[1000005]; vector <int> wyniki,help; bool dfs (int x) { odw[x]=true; for(int j=0; j<G[x].size(); j++) { if (odw[G[x][j]] && parent[x]!=G[x][j]) { sum++; help.push_back(G[x][j]); help.push_back(x); k=parent[x]; //printf ("%d %d ", G[x][j], x); z=0; while (k!=G[x][j] && z<=m*m) { help.push_back(k); //printf ("%d ", k); k=parent[k]; z++; } //printf ("\n"); while (!help.empty()) { ile[help.back()]++; help.pop_back(); } return 0; } if (!odw[G[x][j]]) { parent[G[x][j]]=x; dfs(G[x][j]); } } return 0; } int main() { scanf ("%d%d", &n, &m); for (int i=0; i<m; i++) { scanf ("%d%d", &a, &b); G[a].push_back(b); parent[b]=a; } for (int i=1; i<=n; i++) if (!odw[i]) dfs(i); for (int i=1; i<=n; i++) if (ile[i]==sum) wyniki.push_back(i); if (wyniki.empty() && sum!=0) printf ("0\n\n"); else if (wyniki.empty() || sum==0) printf ("NIE\n"); else { wyn=wyniki.size(); printf ("%d\n", wyn); for (int i=0; i<wyniki.size(); i++) printf ("%d ", wyniki[i]); printf ("\n"); } return 0; }
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 59 60 61 62 63 64 65 66 67 68 69 | #include "cstdio" #include "vector" using namespace std; vector <int> G[1000005]; int n,m,a,b,k,z,wyn,pom,sum,parent[1000005],ile[1000005]; bool odw[1000005]; vector <int> wyniki,help; bool dfs (int x) { odw[x]=true; for(int j=0; j<G[x].size(); j++) { if (odw[G[x][j]] && parent[x]!=G[x][j]) { sum++; help.push_back(G[x][j]); help.push_back(x); k=parent[x]; //printf ("%d %d ", G[x][j], x); z=0; while (k!=G[x][j] && z<=m*m) { help.push_back(k); //printf ("%d ", k); k=parent[k]; z++; } //printf ("\n"); while (!help.empty()) { ile[help.back()]++; help.pop_back(); } return 0; } if (!odw[G[x][j]]) { parent[G[x][j]]=x; dfs(G[x][j]); } } return 0; } int main() { scanf ("%d%d", &n, &m); for (int i=0; i<m; i++) { scanf ("%d%d", &a, &b); G[a].push_back(b); parent[b]=a; } for (int i=1; i<=n; i++) if (!odw[i]) dfs(i); for (int i=1; i<=n; i++) if (ile[i]==sum) wyniki.push_back(i); if (wyniki.empty() && sum!=0) printf ("0\n\n"); else if (wyniki.empty() || sum==0) printf ("NIE\n"); else { wyn=wyniki.size(); printf ("%d\n", wyn); for (int i=0; i<wyniki.size(); i++) printf ("%d ", wyniki[i]); printf ("\n"); } return 0; } |