Labeling Balls
来源:互联网 发布:mac high sierra 编辑:程序博客网 时间:2024/05/29 10:14
Labeling Balls
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 11893 Accepted: 3408
Description
Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them with 1 to N 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 with b".
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 next M line each contain two integers a and b indicating the ball labeled with a 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 label N. 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
5
4 0
4 1
1 1
4 2
1 2
2 1
4 1
2 1
4 1
3 2
Sample Output
1 2 3 4
-1
-1
2 1 3 4
1 3 2 4
有一点不太明白,为什么从小到大就WA
#include <iostream>#include <cmath>#include <cstring>#include <cstdlib>#include <stdio.h>#include <string>#include <stack>#include <queue>#include <algorithm>#include <map>#define WW freopen("a1.txt","w",stdout)using namespace std;const int INF = 0x3f3f3f3f;int n,m;int Du[250];int a[250];bool Map[250][250];bool vis[250];int Topo()拓扑排序{ int wight=n; memset(vis,false,sizeof(vis)); for(int i=1; i<=n; i++) { int ans=0; for(int j=n; j>0; j--) { if(!vis[j]&&Du[j]==0) { ans=j; break; } } if(!ans) { break; } vis[ans]=true; a[ans]=wight--; for(int j=1; j<=n; j++) { if(!vis[j]&&Map[j][ans]) { Du[j]--; } } } return wight;}int main(){ int T; int u,v; bool flag; scanf("%d",&T); while(T--) { scanf("%d %d",&n,&m); flag=true; memset(Map,false,sizeof(Map)); memset(Du,0,sizeof(Du)); for(int i=1; i<=m; i++) { scanf("%d %d",&u,&v); if(!Map[u][v]) { Map[u][v]=true; Du[u]++; } } if(flag) { if(Topo()==0) { for(int i=1; i<=n; i++) { if(i!=1) { printf(" "); } printf("%d",a[i]); } printf("\n"); } else { printf("-1\n"); } } } return 0;}
- Labeling Balls
- Labeling Balls
- Labeling Balls
- poj 3687 Labeling Balls
- POJ 3687 Labeling Balls
- poj 36876 Labeling Balls
- poj 3687 Labeling Balls
- poj_3687 Labeling Balls
- POJ 3687 Labeling Balls
- poj-3687-Labeling Balls
- 14:Labeling Balls
- POJ3687--Labeling Balls
- POJ 3687 Labeling Balls
- poj3687 Labeling Balls
- POJ 3687 Labeling Balls
- POJ 3687 Labeling Balls
- poj 3687 Labeling Balls
- POJ 3687 Labeling Balls
- a中调用js的几种方法
- 使用myeclipse与sqlyog实现简单的增删查修功能中常见的错误
- tinyxml源码解析(上)http://www.cnblogs.com/marchtea/archive/2012/11/09/2762669.html
- tar命令的详细解释
- oracle常见问题:delete truncate drop的区别
- Labeling Balls
- kafka环境搭建
- java基础之接口
- hdu 5317 RGCDQ
- 1873 看病要排队
- Android开发中使用Service还是Thread?
- mongodb的锁及原子性
- c#生成的word文档,怎么控制选定的内容加下划线而不是整行加下划线
- HDU 1059 Dividing 多重背包二进制优化