POJ 3687 Labeling Balls(拓扑序列)
2014-01-27 11:35
459 查看
Labeling Balls
大意:n个重量分别为1-n的小球,给定一些小球间的重量关系。 在符合重量关系的前提下,先输出编号小的球。
思路:也是一道很简单的拓扑排序,不过要倒着来,注意一下要判重边。
大意:n个重量分别为1-n的小球,给定一些小球间的重量关系。 在符合重量关系的前提下,先输出编号小的球。
思路:也是一道很简单的拓扑排序,不过要倒着来,注意一下要判重边。
#include <string.h> #include <iostream> using namespace std; int Map[210][210], indegree[210], Ans[210]; int n, m, x, y; int i, j; void Topo() { for(i = n; i >= 1; i--) { for(j = n; j >= 1; j--) { if(indegree[j] == 0) { indegree[j]--; Ans[j] = i; for(int k = 1; k <= n; k++) { if(Map[j][k] == 1) { indegree[k]--; } } break; } } if(j < 1) { break; } } if(i >= 1) cout << "-1" << endl; else { for(i = 1; i <= n; i++) { if(i < n) { cout << Ans[i] << " "; } else { cout << Ans[i] << endl; } } } } void Solve() { int cases; cin >> cases; while(cases--) { memset(Map, 0, sizeof(Map)); memset(indegree, 0, sizeof(indegree)); cin >> n >> m; for(i = 1; i <= m; i++) { cin >> x >> y; if(!Map[y][x]) { Map[y][x] = 1; indegree[x]++; } } Topo(); } } int main() { Solve(); return 0; }
相关文章推荐
- POJ-3687-Labeling Balls-(求最小字典序拓扑序列)逆向建图-拓扑排序
- poj 3687 Labeling Balls【拓扑排序 输出元素在拓扑序列中的位置】
- poj 3687 Labeling Balls 【拓扑排序 输出元素在拓扑序列中的位置】
- poj 3687 Labeling Balls(拓扑算法)
- poj 3687 Labeling Balls【反向拓扑】
- POJ 3687 Labeling Balls 【逆拓扑】
- POJ 3687 Labeling Balls(逆向拓扑)
- (POJ 3687)Labeling Balls [逆top序列] 求按照某种排列方式的字典序最小的top序列
- poj 3687 Labeling Balls 拓扑 + 贪心
- poj 3687 Labeling Balls 逆向拓扑
- poj 3687 Labeling Balls【反向拓扑】
- POJ 3687--Labeling Balls【拓扑排序 && 逆序拓扑 && 输出在拓扑排序中的位置】
- Poj 3687 Labeling Balls【逆向建图+拓扑排序+优先队列+思维】
- poj-3687-Labeling Balls
- poj 3687 Labeling Balls 【拓扑排序】
- poj 3687 Labeling Balls
- POJ 3687 Labeling Balls
- POJ 3687 Labeling Balls(拓扑排序)
- POJ 3687 Labeling Balls()
- POJ 3687 Labeling Balls (逆向拓扑排序)