【uva-10305】Ordering Tasks (拓扑排序中最简单的一道
2017-11-08 01:07
423 查看
题目大意:
m是任务数,n是已知偏序个数。
接下来n行是偏序。
最后输出满足偏序条件的任意一组。
很随意很和谐的。
连谷歌翻译都不用的。
m是任务数,n是已知偏序个数。
接下来n行是偏序。
最后输出满足偏序条件的任意一组。
很随意很和谐的。
连谷歌翻译都不用的。
/* uva 10305 by zhuhua Time limit: 3000 ms AC Time: 0 ms??? */ #include <iostream> #include <cstring> #include <vector> #include <stack> using namespace std; int task[110]; vector <int> S[110]; vector <int> tot; stack <int> output; bool vis[110]; bool flag[110]; void dfs(int x) { int i; vis[x]=true; for(i=0;i<S[x].size();i++) { int next=S[x][i]; if(!vis[next]) dfs(next); } output.push(x); } int main() { int n,m,x,y; while(cin>>n>>m) { if(n==0&&m==0)break; int i=1; while(i<=n) {S[i].clear();i++;} tot.clear(); while(!output.empty()) output.pop(); memset(flag,0,sizeof(flag)); memset(vis,0,sizeof(vis)); while(m--) { cin>>x>>y; S[x].push_back(y); if(!flag[x]) {flag[x]=true;tot.push_back(x);} if(!flag[y]) {flag[y]=true;tot.push_back(y);} } for(i=0;i<tot.size();i++) { int now=tot[i]; if(!vis[now]) dfs(now); } int cnt=0; while(!output.empty()) { int out=output.top(); if(cnt++)cout<<' '; cout<<out; output.pop(); } for(i=1;i<=n;i++) { if(!flag[i]) { if(cnt++)cout<<' '; cout<<i; } }cout<<endl; } return 0; }
相关文章推荐
- UVa 10305 Ordering Tasks(拓扑排序)
- HDU - 1285 确定比赛名次 &&UVA - 10305 Ordering Tasks (拓扑排序)
- UVa 10305 - Ordering Tasks 拓扑排序
- UVA 10305- Ordering Tasks(经典拓扑排序)
- UVa 10305 Ordering Tasks 拓扑排序
- uva 10305 简单拓扑排序
- UVa 10305 Ordering Tasks 拓扑排序
- uva 10305 Ordering Tasks(拓扑排序)
- UVa 10305 - Ordering Tasks【拓扑排序】
- UVA - 10305 Ordering Tasks(拓扑排序模板题)
- UVa 10305 Ordering Tasks【拓扑排序】
- UVA10305 Ordering Tasks【DFS】【拓扑排序】
- UVa--10305 Ordering Tasks(拓扑排序)
- UVa 10305 Ordering Tasks 拓扑排序 解题报告
- UVa 10305 Ordering Tasks (拓扑排序模板)
- UVa 10305 - Ordering Tasks 拓扑排序题解
- UVA.10305 Ordering Tasks (拓扑排序)
- Uva 10305 Ordering Tasks(拓扑排序)
- Uva 10305 Ordering Tasks (用dfs 实现拓扑排序)
- UVA-10305 Ordering Tasks (拓扑排序)