D - Ordering Tasks (拓扑排序)
Posted liuyongliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D - Ordering Tasks (拓扑排序)相关的知识,希望对你有一定的参考价值。
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 */
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 */
以上是关于D - Ordering Tasks (拓扑排序)的主要内容,如果未能解决你的问题,请参考以下文章
UVa 10305 - Ordering Tasks (拓扑排序裸题)
UVA - 10305 Ordering Tasks(拓扑排序)
Uva 10305 Ordering Tasks(拓扑排序模版题)