首页 > 其他 > 详细

hdu 4857 反向拓扑问题

时间:2016-08-22 21:20:06      阅读:194      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!