【未完】【连通性,度数,拓扑 】POJ 3687 Labeling Balls

【题目】http://poj.org/problem?id=3687

【代码】

#include<cstdio>
#include<cstring>
#define maxn 210
using namespace std;
int n,m,out[maxn],q[maxn];
int i,j,k,graph[maxn][maxn];

bool Toposort()
{
    for(i=n; i>=1; i--) //按编号从大到小
    {
        for(j=n; j>=1; j--) //找质量最大的
        {
            if(!out[j])
            {
                q[j]=i;
                out[j]=-1;
                break;
            }
        }//j未通过break退出循环,说明无零出度节点,有环
        if(j<1)
            return false;
        for(k=1; k<=n; k++)
        {
            if(graph[k][j])
                out[k]--;
        }
    }
    return true;
}

int main()
{
    int T,u,v;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        memset(graph,0,sizeof(graph));
        memset(out,0,sizeof(out));
        for(i=0; i<m; i++)
        {
            scanf("%d%d",&u,&v);
            if(!graph[u][v])
            {
                graph[u][v]=true;
                out[u]++;
            }//注意重边
        }
        if(Toposort())
        {
            for(i=1; i<=n; i++)
            {
                if(i!=n)
                    printf("%d ",q[i]);
                else
                    printf("%d\n",q[i]);
            }
        }
        else
            printf("-1\n");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_32259423/article/details/81416835