POJ 3687 Labeling Balls(拓扑排序,逆序)
来源:互联网 发布:java纽约大亨 编辑:程序博客网 时间:2024/06/08 00:46
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和普通拓扑排序一样,只是逆序赋值ac代码:#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#define INF 0x7fffffff#define MAXN 600#define max(a,b) a>b?a:b#define min(a,b) a>b?b:ausing namespace std;int pri[MAXN][MAXN];int v[MAXN];int num[MAXN];int n,m;int main(){int i,j,a,b,k,t,bz;scanf("%d",&t);while(t--){bz=0;scanf("%d%d",&n,&m);memset(pri,0,sizeof(pri));memset(v,0,sizeof(v));memset(num,0,sizeof(num));for(i=0;i<m;i++){scanf("%d%d",&a,&b);if(pri[b][a]==0){ pri[b][a]=1; v[a]++;}}for(i=n;i>=1;i--)//逆序{k=-1;for(j=n;j>=1;j--){if(v[j]==0){k=j;num[j]=i;v[j]=-1;break;}}if(k!=-1){for(j=1;j<=n;j++){if(pri[k][j]){v[j]--;pri[k][j]=0;}} } else { bz=1; break; }}if(bz)printf("-1\n");else{for(i=1;i<=n-1;i++){printf("%d ",num[i]);}printf("%d\n",num[n]); }}return 0;}
- POJ 3687-Labeling Balls(逆序拓扑排序)
- Labeling Balls(POJ 3687-逆序拓扑排序)
- POJ 3687 Labeling Balls(拓扑排序,逆序)
- poj 3687 Labeling Balls ( 拓扑排序 )
- **poj 3687 Labeling Balls (*拓扑排序)
- poj 3687 Labeling Balls(拓扑排序)
- poj 3687 Labeling Balls (拓扑排序)
- POJ 3687 Labeling Balls (拓扑排序)
- pku 3687 Labeling Balls 逆序拓扑排序
- POJ 3687--Labeling Balls【拓扑排序 && 逆序拓扑 && 输出在拓扑排序中的位置】
- poj 3687 Labeling Balls(拓扑排序)
- POJ 3687 Labeling Balls 拓扑排序
- poj 3687 【拓扑排序】【Labeling Balls】
- poj Labeling Balls 3687 拓扑排序!!!!
- poj 3687 Labeling Balls 拓扑排序
- POJ 3687Labeling Balls(拓扑排序)
- POJ 3687 Labeling Balls 拓扑排序
- Poj 3687 Labeling Balls[拓扑排序]
- cvs常用命令
- hadoop-mapreduce学习
- JavaScript之Window对象
- FFmpeg常用基本命令
- iOS真机系列之真机调试
- POJ 3687 Labeling Balls(拓扑排序,逆序)
- 解决checkbox的attr(checked)一直为undefined问题
- JLINK(SEGGER)灯不亮 USB不识别固件修复、clone修改
- .nav ul .mall a:hover 是什么意思
- 一个lwip资料的帖子
- win32+QT 实现exe中执行返回的网页内容重定向到txt文件,根据需求读取里面内容
- STL之map详解
- Windows环境下安装wdl文件
- 编程不过是文字游戏