Guess
题意:
拓扑排序
1 #include2 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 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 }