UA 4255 Guess (拓扑排序)

来源:互联网 发布:轩子巨2兔黑历史知乎 编辑:程序博客网 时间:2024/04/29 23:04

大白书309页


#include<bits/stdc++.h>using namespace std;char s[55];int m[11][11],b[11],a[11],in[11];int main(){    int t,i,j,n,k;    cin>>t;    while(t--)    {        scanf("%d%s",&n,s);        memset(m,0,sizeof(m));        memset(in,0,sizeof(in));        for(i=1,j=1,k=0;k<strlen(s);++k,++j)        {            if(j==n+1) {++i;j=i;}            if(s[k]=='+') {m[i-1][j]=1;in[j]++;}            else if(s[k]=='-') {m[j][i-1]=1;in[i-1]++;}        }        int cnt=0,v[11],val=0;        while(cnt<=n)        {            memset(v,0,sizeof(v));            for(i=0;i<=n;++i)                if(in[i]==0)                {                    b[i]=val;                    v[i]=1;                    ++cnt;                    in[i]=-1;                }            ++val;            for(i=0;i<=n;++i)            {                if(v[i])                {                for(j=0;j<=n;++j)                    if(m[i][j])                        --in[j];                }            }        }        for(i=1;i<n;++i) printf("%d ",b[i]-b[i-1]);        printf("%d\n",b[i]-b[i-1]);    }    return 0;}

0 0
原创粉丝点击