hdu 4857

来源:互联网 发布:linux x264命令 编辑:程序博客网 时间:2024/05/22 00:36
//反向拓扑+优先队列#include<iostream>#include<queue>#include<vector>#include<cstdio>#include<algorithm>#include<stack>#include<cstring>using namespace std;const int maxn = 30005;int main(){    int T;    scanf("%d",&T);    while (T--)    {        int n,m,p1,p2,Indegree[maxn];        memset(Indegree,0,sizeof(Indegree));       vector<int>edge[maxn];        stack<int>vex;        priority_queue<int>que;                      //编号越大越先出队        scanf("%d%d",&n,&m);        while (m--)        {            scanf("%d%d",&p1,&p2);            edge[p2].push_back(p1);                     //邻接表储存,由p2指向p1            Indegree[p1]++;             //p1入度数        }        for (int i = 1;i <= n;i++)   if (Indegree[i] == 0)   que.push(i);           //入度为0的人进入队列        while (!que.empty())        {            int val = que.top();            que.pop();            vex.push(val);            for (int i = 0;i < edge[val].size();i++)            {                if (--Indegree[edge[val][i]] == 0)  que.push(edge[val][i]);            }        }        int len = vex.size();        for(int i=0;i<len-1;i++)        {            printf("%d ",vex.top());            vex.pop();        }        printf("%d\n",vex.top());    }    return 0;}
原创粉丝点击