1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <vector> 5 #include <queue> 6 #include <functional> 7 using namespace std; 8 #define maxn 100005 9 10 int n, a, indegree[maxn]; 11 vector<int> G[maxn]; 12 13 void TopoSort() 14 { 15 priority_queue<int, vector<int>, greater<int> >q; 16 for (int i = 1; i <= n; i++) 17 if (indegree[i] == 0)q.push(i); 18 while (!q.empty()) { 19 int u = q.top(); 20 q.pop(); 21 printf("v%d ", u); 22 for (int i = 0; i < G[u].size(); i++) { 23 int v = G[u][i]; 24 indegree[v]--; 25 if (indegree[v] == 0) 26 q.push(v); 27 } 28 } 29 } 30 31 int main() 32 { 33 int u, v; 34 cin >> n >> a; 35 for (int i = 0; i < a; i++) { 36 cin >> u >> v; 37 G[u].push_back(v); 38 indegree[v]++; 39 } 40 TopoSort(); 41 printf("\n"); 42 //system("pause"); 43 return 0; 44 }