POJ 3687 Labeling Balls(拓扑排序,逆序)

来源:互联网 发布:java纽约大亨 编辑:程序博客网 时间:2024/06/08 00:46
Labeling Balls
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 12256 Accepted: 3510

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:

  1. No two balls share the same label.
  2. 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, bN) 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;}



 
0 0
原创粉丝点击