Labeling Balls 3687(拓扑排序+反向建图)
来源:互联网 发布:软件可行性分析报告 编辑:程序博客网 时间:2024/06/03 11:17
Description
Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them with 1 toN in such a way that:
- No two balls share the same label.
- The labeling satisfies several constrains like "The ball labeled with a is lighter than the one labeled withb".
Can you help windy to find a solution?
Input
The first line of input is the number of test case. The first line of each test case contains two integers,N (1 ≤ N ≤ 200) and M (0 ≤ M ≤ 40,000). The nextM line each contain two integers a and b indicating the ball labeled witha must be lighter than the one labeled with b. (1 ≤ a, b ≤N) There is a blank line before each test case.
Output
For each test case output on a single line the balls' weights from label 1 to labelN. If several solutions exist, you should output the one with the smallest weight for label 1, then with the smallest weight for label 2, then with the smallest weight for label 3 and so on... If no solution exists, output -1 instead.
Sample Input
54 04 11 14 21 22 14 12 14 13 2
Sample Output
1 2 3 4-1-12 1 3 41 3 2 4#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;int map[210][210];int queue[210];int indegree[210];int n,m;void INPUT(){int i,a,b;memset(map,0,sizeof(map));memset(indegree,0,sizeof(indegree));scanf("%d%d",&n,&m);for(i=0;i<m;++i){scanf("%d%d",&a,&b);if(map[b][a]==0){map[b][a]=1;indegree[a]++;}}}void Topo(){int i,j,top,num=0;for(j=n;j>=1;--j){top=-1;for(i=n;i>=1;--i){if(indegree[i]==0){top=i;break;}}if(top==-1)break;queue[top]=j;indegree[top]=-1;for(i=1;i<=n;++i){if(map[top][i]){indegree[i]--;}}}if(j!=0){printf("-1\n");}else{for(i=1;i<=n;++i){printf(i==1?"%d":" %d",queue[i]);}printf("\n");}}int main(){int t;scanf("%d",&t);while(t--){INPUT();Topo();}return 0;}
- Labeling Balls 3687(拓扑排序+反向建图)
- poj-3687-Labeling Balls-反向建图+拓扑排序
- Labeling Balls poj 3687(拓扑排序反向建图)
- 3687-Labeling Balls-反向拓扑排序
- POJ 3687 Labeling Balls (反向拓扑排序)
- POJ 3687 Labeling Balls (反向拓扑排序)
- POJ 3687 Labeling Balls(拓扑排序+反向思考)
- POJ:3687 Labeling Balls (反向建图+拓扑排序+优先队列)
- POJ 3687 Labeling Balls(拓扑排序【反向建图+优先队列】)
- POJ - 3687Labeling Balls(反向建图 + 反向拓扑)题意坑
- poj 3687 Labeling Balls ( 拓扑排序 )
- **poj 3687 Labeling Balls (*拓扑排序)
- poj 3687 Labeling Balls(拓扑排序)
- poj 3687 Labeling Balls (拓扑排序)
- POJ 3687 Labeling Balls (拓扑排序)
- Labeling Balls POJ3687 【拓扑排序反向建边】【邻接表】
- poj3687 Labeling Balls (反向拓扑排序)
- POJ-3687-Labeling Balls-(求最小字典序拓扑序列)逆向建图-拓扑排序
- C++对象模型——对象复制语意学 (Object Copy Semantics)(第五章)
- Android开发专栏之ListView一两种适配器的使用和优化
- 【python】python新手必碰到的问题---encode与decode,中文乱码[转]
- 高仿知乎日报(三)
- test
- Labeling Balls 3687(拓扑排序+反向建图)
- javascript高级程序设计知识整理(3)
- 字符串连接(strcat)的函数
- 默认函数实现全排列
- HDU1158 Employment Planning
- OC Xcode快捷键整理
- HBase 数据库检索性能优化策略
- [优化篇]OpenStack的Cinder后端存储技术——NFS
- hdu 5389 Zero Escape dp