POJ 3292

这题跪了一下午、、都不知道自己怎么错的、、先贴个正确的代码

这题有坑、

/*这题为什么如此之坑,搞acm的人脑回路好曲折,膜拜。
有一堆小球,要求a小球要在b小球前面,最后要求输出的是x号小球的位置;
正向建图是不对的,因为题目要求的是标号小的要尽量在前
如果按照普通的拓扑排序的话,举个栗子,5个点 2条边,2在1前面,5在1前面
那么3和4是自由点,按照普通的拓扑排序的话,结果是 2->3->4->5->1 但是题目要求的是结果是
2->5->1->3->4  正向建图不对的原因是因为独立点,和1有关的点都满足条件,但是独立点总会把小的点挤到后面去
而且正着建图反着找也不对,独立点会在后面,但是小的点也会在后面了
但是如果反向建图的话,而且反着找,每次都把最大的放进去那些大的独立点就会在后面。总之就是很奇葩的一道题、、
*/
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <vector>
#include <functional>
#include <algorithm>
#include <math.h>
#define INF 0x3f3f3f3f
using namespace std;

int p[50000],vis[205],s[205][205],n,sk,sum[205],flag;

void tuopu()
{
    int l;
    memset(vis,0,sizeof(vis));
    sk=0;
    int cnt=n;
    priority_queue<int ,vector<int>,l<int> >q;
    for(int i=n;i>=1;i--)
    {
        flag=0;
        for(int j=n;j>=1;j--)
        {
            if(vis[j]==0&&p[j]==0)
            {
                l=j;
                flag=1;
                sum[j]=cnt;
                cnt--;
                break;
            }
        }
        vis[l]=1;
        if(flag==0)
        {
            break;
        }
        for(int j=n;j>=1;j--)
        {
            if(vis[j]==0&&s[l][j]==1)
            {
                p[j]--;
            }
        }
    }
    return ;
}
int main()
{
    int T,m,a,b;
    scanf("%d",&T);
    while(T--)
    {
        sk=0;
        memset(p,0,sizeof(p));
        memset(s,0,sizeof(s));
        scanf("%d%d",&n,&m);
        while(m--)
        {
            scanf("%d%d",&a,&b);
            if(s[b][a]==0)
            {
                s[b][a]=1;
                p[a]++;
            }
        }
        tuopu();
        if(flag==0)
        {
            printf("-1\n");
        }
        else
        {
            for(int i=1; i<=n; i++)
            {
                printf("%d",sum[i]);
                if(i!=n)
                {
                    printf(" ");
                }
                else
                {
                    printf("\n");
                }
            }
        }

    }
    return 0;
}

 

posted @ 2016-01-25 21:25  萌萌哒哒哒  阅读(179)  评论(0编辑  收藏  举报