Guess UVALive - 4255 (拓扑排序)

Guess

 UVALive - 4255 

题意:

拓扑排序

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn=12;
 5 int p[maxn][maxn],b[maxn];
 6 int in[maxn];
 7 int n;
 8 
 9 void top_sort(){
10     queue<int> q;
11     for(int i=0;i<=n;i++) if(in[i]==0) q.push(i);
12     while(!q.empty()){
13         int x=q.front();
14         q.pop();
15         for(int i=0;i<=n;i++) if(p[x][i]==1){
16             b[i]=b[x]-1;
17             in[i]--;
18             if(in[i]==0) q.push(i);
19         }
20     }
21 }
22 int main(){
23     int t;
24     scanf("%d",&t);
25     b[0]=0;
26     while(t--){
27         memset(b,0,sizeof(b));
28         memset(p,0,sizeof(p));
29         memset(in,0,sizeof(in));
30         scanf("%d",&n);
31         getchar();
32         int m=(n+1)*n/2;
33         char s;
34         for(int i=1;i<=n;i++){
35             for(int j=i;j<=n;j++){
36                 scanf("%c",&s);
37                 if(s=='+') p[j][i-1]=1,in[i-1]++;
38                 else if(s=='-') p[i-1][j]=1,in[j]++;
39             }
40         }
41         top_sort();
42         for(int i=1;i<=n;i++) printf("%d%c",b[i]-b[i-1],i==n?'\n':' ');
43     }
44 }
View Code

 

posted @ 2017-08-26 14:37  yijiull  阅读(195)  评论(0编辑  收藏  举报