码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 4857 反向拓扑问题

时间:2016-08-22 21:23:06      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

尤其要注意拓扑的分层问题 不难理解 就是不怎么好想到 拓扑的思路这里就不累述了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define maxn 30007
using namespace std;

int T;
int n,m;
int in[maxn];
vector<int> edge[maxn];
priority_queue<int> q;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        memset(in,0,sizeof(in));
        scanf("%d%d",&n,&m);
        for(int i = 1;i <= n;i++) 
            edge[i].clear(); 
        int a,b;
        for(int j = 1;j <= m;j++) {
            scanf("%d%d",&a,&b);
            in[a]++;
            edge[b].push_back(a);
        }
        for(int i = 1;i <= n;i++)
            if(!in[i]) q.push(i);
        vector<int> ans;
        while(!q.empty()) {
            a = q.top();
            ans.push_back(a);
            q.pop();
            for(int j = 0;j < edge[a].size();j++) {
                b = edge[a][j];
                in[b]--;
                if(in[b] == 0) q.push(b);
            }
        }
        for(int i = ans.size()-1;i > -1;i--) {
            if(i != 0) printf("%d ",ans[i]);
            else printf("%d\n",ans[i]);
        }
    }
    return 0;

hdu 4857 反向拓扑问题

标签:

原文地址:http://www.cnblogs.com/z1141000271/p/5796984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!