1. 程式人生 > >D - Ordering Tasks (拓撲排序)

D - Ordering Tasks (拓撲排序)

lap sed pan bre mem eof event int vector

D - Ordering Tasks

題意:給個有向圖,進行拓撲排序

技術分享圖片
 1 /***********************************************/
 2 struct node{
 3     int v;
 4     node(){}
 5     node(int _v):v(_v){}
 6 };
 7 vector<node>G[maxn];//鄰接表法 
 8 int in[maxn],out[maxn];//每個頂點入度出度 
 9 int n,m;
10 
11 void Tuop()
12 {
13     for
(int i=1;i<=n;i++) 14 if(in[i]==0) 15 { 16 for(int j=0;j<G[i].size();j++) 17 { 18 in[G[i][j].v]--; 19 } 20 cout<<i<<" "; 21 in[i]=-1; 22 Tuop(); 23 break; 24 }
25 } 26 27 int main() 28 { 29 30 while(1) 31 { 32 sc2(n,m); 33 if(n==0 && m==0) return 0; 34 mem0(G); 35 mem0(in); 36 mem0(out); 37 for(int i=1;i<=m;i++){ 38 int a,b; 39 sc2(a,b); 40 G[a].push_back(node(b));
41 in[b]++; 42 out[a]++; 43 } 44 45 Tuop(); 46 cout<<endl; 47 } 48 return 0; 49 } 50 51 52 /* 53 5 4 54 1 2 55 2 3 56 1 3 57 1 5 58 0 0 59 */
View Code

E - 確定比賽名次

一樣的有向圖拓撲排序,答案用vector存一下,保證空格

技術分享圖片
 1 /***********************************************/
 2 struct node{
 3     int v;
 4     node(){}
 5     node(int _v):v(_v){}
 6 };
 7 vector<int>ans;//存拓撲排序結果 
 8 vector<node>G[maxn];//鄰接表法 
 9 int in[maxn],out[maxn];//每個頂點入度出度 
10 int n,m;
11 
12 void Tuop()
13 {
14     for(int i=1;i<=n;i++)
15         if(in[i]==0)
16         {
17             for(int j=0;j<G[i].size();j++)
18             {
19                 in[G[i][j].v]--;
20             }
21             ans.p_b(i);
22             in[i]=-1;
23             Tuop();
24             break;
25         }
26 }
27 
28 int main()
29 {
30     while(sc2(n,m)!=EOF)
31     {
32         ans.clear();
33         
34         if(n==0 && m==0) return 0;
35         mem0(G);
36         mem0(in);
37         mem0(out);
38         for(int i=1;i<=m;i++){
39             int a,b;
40             sc2(a,b);
41             G[a].push_back(node(b));
42             in[b]++;
43             out[a]++;
44         }
45         Tuop();
46         cout<<ans[0];
47         for(int i=1;i<ans.size();i++)
48             cout<<" "<<ans[i];
49         cout<<endl;
50     }
51     return 0;
52 }
53 
54 
55 /*
56 5 4
57 1 2
58 2 3
59 1 3
60 1 5
61 0 0
62 */
View Code

D - Ordering Tasks (拓撲排序)