poj 3687 Labeling Balls(拓扑排序)
2015-11-28 10:40
253 查看
Labeling Balls
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
Sample Output
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 12699 | Accepted: 3655 |
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
#include<stdio.h> #include<queue> #include<string.h> using namespace std; struct Node { int to,next; }node[40010]; int head[40010]; int arr[210]; int indegree[210]; void inital() { memset(arr,0,sizeof(arr)); memset(head,-1,sizeof(head)); memset(indegree,0,sizeof(indegree)); } void sorttopo(int n) { priority_queue<int,vector<int>,less<int> >q; int i,j; for(i=1;i<=n;i++) if(!indegree[i]) q.push(i); if(q.empty()) { printf("-1\n"); return ; } int w=n; while(!q.empty()) { int top=q.top(); q.pop(); indegree[top]=-1; arr[top]=w--; for(j=head[top];j!=-1;j=node[j].next) { indegree[node[j].to]--; if(!indegree[node[j].to]) q.push(node[j].to); } } if(w==0) { printf("%d",arr[1]); for(i=2;i<=n;i++) printf(" %d",arr[i]); } else printf("-1"); printf("\n"); } int main() { int n,m,T; scanf("%d",&T); while(T--) { inital(); scanf("%d%d",&n,&m); int i,a,b; for(i=0;i<m;i++) { scanf("%d%d",&a,&b); node[i].to=a; node[i].next=head[b]; head[b]=i; indegree[a]++; } sorttopo(n); } return 0; }
相关文章推荐
- Shader - Pass (六)
- 二叉树构建与遍历
- delphi 十进制十六进制转换
- 233. Number of Digit One
- HDU 1238 全枚举
- 【神器】yololib 飘云修改版 -- 给iOS APP 添加导入表注入--你懂的
- 日经春秋 20151128
- 135 Which three statements are true about windows? (Choose three.) A. Only one window can be open at
- 【ios开发】浅谈Target-action模式
- Centos7-mqtt消息中间件mosquitto的安装和配置
- python解决接口测试获取手机验证码问题
- [转] --- Error: “A field or property with the name was not found on the selected data source” get only on server
- 输入命令快速启动应用
- 天声人語 20151128 還暦の自民党に音なし
- Form表单 回车键 防止未校验直接提交
- 侧滑
- SQL SERVER 2008 nvarchar 转换 deciaml 失败(nvarchar to decimal)
- 数据库系统概论----关系运算之除运算
- 自己动手实现一个简单c编译器
- WordPress主题制作(6)-关于页面模板