Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N=1e5+10;
- struct Node
- {
- vector<int> adj;
- int indeg;
- Node()
- {
- indeg=0;
- }
- } g[N];
- int n, m, topo[N];
- bool Kahn ()
- {
- int idx=0;
- queue<int> q;
- for (int i=1;i<=n;i++) if (!g[i].indeg) q.push(i);
- while (!q.empty())
- {
- int v=q.front();
- q.pop();
- topo[++idx]=v;
- for (int i=0;i<g[v].adj.size();i++)
- {
- int u=g[v].adj[i];
- g[u].indeg--;
- if (!g[u].indeg) q.push(u);
- }
- }
- if (idx==n) return true; //svi cvorovi stavljeni
- return false; //postoji ciklus
- }
- int main()
- {
- scanf ("%d%d", &n, &m);
- for (int i=0;i<m;i++)
- {
- int a, b;
- scanf ("%d%d", &a, &b);
- g[a].adj.push_back(b);
- g[b].indeg++;
- }
- if (Kahn()) for (int i=1;i<=n;i++) printf ("%d ", topo[i]);
- else printf ("-1");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment