标签:style blog color 使用 os io for div
教训:使用邻接表的时候一定要把邻接表的结构组定义的足够大,不能仅仅等于节点的个数,因为线段的数量往往远超过节点的数量。
这个题目是拓扑排序练习,提高下理解。
1 #include<iostream> 2 using namespace std; 3 struct TOPO 4 { 5 int from,to,next; 6 }; 7 TOPO p[200001];//这里要定义的足够大才行 8 int head[200001];//它和上面的是同步的大小才好 9 int *in,*use; 10 int cnt; 11 void Merge(int f,int t) 12 { 13 p[cnt].from=f; 14 p[cnt].to=t; 15 p[cnt].next=head[f]; 16 head[f]=cnt; 17 cnt++; 18 } 19 int main() 20 { 21 int n,m; 22 while(cin>>n>>m) 23 { 24 cnt=1; 25 in=new int[n+1]; 26 use=new int[n+1]; 27 for(int i=0;i<=n;i++) 28 { 29 in[i]=0; 30 use[i]=0; 31 head[i]=-1; 32 } 33 int a,b; 34 for(int i=1;i<=m;i++) 35 { 36 cin>>a>>b; 37 Merge(a,b); 38 in[b]++; 39 //out[a]++; 40 } 41 int index=0; 42 43 for(int i=1;i<=n;i++) 44 { 45 for(int j=1;j<=n;j++) 46 { 47 if(!use[j]&&in[j]==0) 48 { 49 if(i>1)cout<<" "; 50 index=j; 51 use[j]=1; 52 cout<<j; 53 break; 54 } 55 } 56 for(int j=head[index];j!=-1;j=p[j].next) 57 { 58 in[p[j].to]--; 59 } 60 } 61 cout<<endl; 62 delete []in; 63 delete []use; 64 } 65 return 0; 66 }
标签:style blog color 使用 os io for div
原文地址:http://www.cnblogs.com/sytu/p/3876752.html