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;

}

 

你可能感兴趣的:(round)