首页 > 代码库 > BestCoder Round #1
BestCoder Round #1
逃生
反向拓扑+优先队列+逆序输出
注意一个样例
input:13 13 1answer:3 1 2而不是2 3 1
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<algorithm>#define MAXN 30005using namespace std;vector<int> g[MAXN];int in[MAXN];int n;void clear(){ for(int i=1; i<=n; ++i) { g[i].clear(); in[i]=0; }}int main(){ int T; scanf("%d",&T); while(T--) { int m; scanf("%d%d",&n,&m); clear(); while(m--) { int a,b; scanf("%d%d",&a,&b); g[b].push_back(a); in[a]++; } priority_queue<int,vector<int>,less<int> > pq; for(int i=1; i<=n; ++i) if(in[i]==0) pq.push(i); vector<int> ans; while(!pq.empty()) { int p=pq.top(); pq.pop(); ans.push_back(p); for(int i=0; i<g[p].size(); ++i) { int &u=g[p][i]; in[u]--; if(!in[u]) pq.push(u); } } for(int i=ans.size()-1; i>=0; --i) if(i==ans.size()-1) printf("%d",ans[i]); else printf(" %d",ans[i]); printf("\n"); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。