Advertisement
hieudoan

UVa 10305 Ordering Tasks

Aug 7th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.76 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef vector<int> vi;
  5.  
  6. int n,m;  //n<100
  7. vector<vi> adjList;
  8. vector<bool> visited;
  9. vector<int> tpOrder;
  10.  
  11. void dfs2(int u){
  12.     visited[u]=true;
  13.     for(int i=0;i<adjList[u].size();i++){
  14.         int v=adjList[u][i];
  15.         if(!visited[v]){
  16.             dfs2(v);
  17.         }
  18.     }
  19.     tpOrder.push_back(u);
  20. }
  21.  
  22. int main()
  23. {
  24.     while(scanf("%d%d",&n,&m),n||m){
  25.         adjList.assign(104,vi(0));
  26.         visited.assign(104,false);
  27.         tpOrder.clear();
  28.  
  29.         int a,b;
  30.         for(int i=0;i<m;i++){
  31.             scanf("%d%d",&a,&b);
  32.             adjList[a].push_back(b);
  33.         }
  34.         for(int node=1;node<=n;node++){
  35.             if(!visited[node]){
  36.                 dfs2(node);
  37.             }
  38.         }
  39.         //reverse tpOrder
  40.         for(int i=n-1;i>=0;i--){
  41.             printf("%d",tpOrder[i]);
  42.             printf(i>0?" ":"\n");
  43.         }
  44.     }
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement