poj3687--Labeling Balls
来源:互联网 发布:云服务器设计软件 编辑:程序博客网 时间:2024/06/05 17:41
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
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
Source
#include <stdio.h>#include <string.h>struct node{ int v ; node *next ;} *head[300];int in[300] ;int p[300] , top ;void add(int u,int v){ node *q = new node ; q->v = u ; q->next = head[v]; head[v] = q ;}int f(int n){ int i , ans = 0 ; top = 0 ; while(1) { int u = -1 ; for(i = n ; i >= 1 ; i--) { if(in[i] == 0) { p[top++] = i ; in[i] = -1 ; ans++ ; u = i ; break; } } if(u == -1) return -1 ; if(ans == n) return 1 ; for( node *q = head[u] ; q != NULL ; q = q->next ) in[ q->v ]-- ; }}int main(){ int t , i , j , n , m ; scanf("%d", &t); while(t--) { memset(in,0,sizeof(in)); scanf("%d %d", &n, &m); for(i = 1 ; i <= n ; i++) head[i] = NULL ; for(i = 0 ; i < m ; i++) { int u , v ; scanf("%d %d", &u, &v); in[u]++ ; add(u,v); } int k = f(n); if(k == -1) printf("-1\n"); else { for(i = 1 ; i <= n ; i++) { for(j = 0 ; j < top ; j++) if(p[j] == i) break; if(i == n) printf("%d\n", n-j); else printf("%d ", n-j); } } } return 0;}
- POJ3687--Labeling Balls
- poj3687 Labeling Balls
- poj3687--Labeling Balls
- [置顶]Labeling Balls--poj3687
- poj3687 Labeling Balls
- poj3687 Labeling Balls
- poj3687 Labeling Balls 拓扑排序
- poj3687 Labeling Balls【拓扑排序】
- POJ3687 Labeling Balls逆拓扑排序
- POJ3687 Labeling Balls (拓扑排序)经典
- [逆向拓扑排序]POJ3687 Labeling Balls
- POJ3687 Labeling Balls 特殊拓扑排序
- poj3687 Labeling Balls (反向拓扑排序)
- POJ3687 Labeling Balls(拓扑排序的应用)
- Labeling Balls POJ3687 【拓扑排序反向建边】【邻接表】
- poj3687——Labeling Balls(拓扑排序)
- Labeling Balls
- Labeling Balls
- js 城市三级联动
- textarea的disabled与readonly属性简介
- bootloader与linux之间传参数
- 创建自己的Repo Server
- 网站架构
- poj3687--Labeling Balls
- 零经验接手APP运营推广,聊聊这两个月我是怎么熬过来的
- web service 概念
- 网站架构参考
- 如何实现电商梦!
- oracle实现远程连接超简单;枚举与剪枝();PowerDesigner生成数据库代码注意里面的双引号,应该去掉
- 操作时序的错误笔记(18B20)
- JHOST邀请码
- 第2次实验——算法基本功 与 综合思考