BestCoder Round #1 第一题 逃生

// 等了好久,BESTCODER 终于出来了、、像咋这样的毕业的人、、就是去凑凑热闹
// 弱校搞acm真是难,不过还是怪自己不够努力
// 第一题是明显的拓扑排序,加了了个字典序限制而已
// 用优先队列就可以搞定了
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
using namespace std;
#define LL long long
#define N 30010
#define mod 1000000007
vector<int> V[N];
int in[N];
int ans[N];
int main()
{
   // priority_queue<int,vector<int>,greater<int> >Q;
   priority_queue<int>Q;
    int T;
    int n,m;
    int a,b;
    int i;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&n,&m);
        for(i=1;i<=n;i++){
            V[i].clear();
            in[i]=0;
        }
        while(m--)
        {
           scanf("%d %d",&a,&b);
           V[b].push_back(a);
           in[a]++;
        }
        for(i=1;i<=n;i++)
            if(in[i]==0)
               Q.push(i);
        int id=0;
        while(!Q.empty())
        {
            a=Q.top();
            Q.pop();
           ans[id]=a;
           id++;
            for(i=0;i<V[a].size();i++){
                b=V[a][i];
                in[b]--;
                if(in[b]==0)
                    Q.push(b);

            }
        }
        for(i=id-1;i>=0;i--)
            printf("%d%c",ans[i],i==0?'\n':' ');
    }
    return 0;
}

 

posted on 2014-07-20 20:02  江财小子  阅读(681)  评论(2编辑  收藏  举报