POJ 3687:Labeling Balls(优先队列+拓扑排序)
来源:互联网 发布:mac怎么进入苹果系统 编辑:程序博客网 时间:2024/06/06 22:07
Memory Limit: 65536KTotal Submissions: 10178
Accepted: 2815
Description
Windy has N balls of distinct weights from 1 unit toN 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 witha 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) andM (0 ≤ M ≤ 40,000). The nextM line each contain two integersa andb indicating the ball labeled witha must be lighter than the one labeled withb. (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
在基本的拓扑排序的基础上又增加了一个要求:编号最小的节点要尽量排在前面;在满足上一个条件的基础上,编号第二小的节点要尽量排在前面;
在满足前两个条件的基础上,编号第三小的节点要尽量排在前面……依此类推。点击打开链接又是看结题报告。。。。哎。。。。太弱了
第一百篇。。留念。。。
#include<cstdio>#include<iostream>#include<cstring>#include<queue>#include<algorithm>#include<vector>using namespace std;const int M = 250 ;int t, n, m;int outint[M];int out[M];int in[M];int cut;vector<int>amap[M];int flag;bool toposort(){ cut = 0; priority_queue<int>que; for(int i=1; i<=n; i++) if( !in[i] ) que.push(i); while( !que.empty() ) { int u = que.top(); que.pop(); outint[ cut++] = u; for( int i=0; i<amap[u].size(); i++ ) { int v = amap[u][i]; if( --in[v]==0 ) que.push(v); } } if( cut<n ) return false; else return true;}int main(){ scanf( "%d", &t ); while( t-- ) { memset( in, 0, sizeof(in) ); scanf( "%d%d", &n, &m ); for( int i=1; i<=n; i++ ) amap[i].clear(); for( int i=1; i<=m; i++ ) { int a, b; scanf( "%d%d", &a, &b ); amap[b].push_back(a); in[a]++; } if( !toposort() ) printf("-1\n"); else { for( int i=0; i<n; i++ ) out[ outint[i] ] = n-i; for(int i=1; i<=n; i++) { if(i<n) printf( "%d ", out[i] ); else printf( "%d\n", out[i] ); } } } return 0;}
- POJ 3687:Labeling Balls(优先队列+拓扑排序)
- POJ 3687 Labeling Balls 拓扑排序 优先队列实现
- 拓扑排序+优先队列Labeling Balls
- poj 3687 Labeling Balls ( 拓扑排序 )
- **poj 3687 Labeling Balls (*拓扑排序)
- poj 3687 Labeling Balls(拓扑排序)
- poj 3687 Labeling Balls (拓扑排序)
- POJ 3687 Labeling Balls (拓扑排序)
- POJ:3687 Labeling Balls (反向建图+拓扑排序+优先队列)
- POJ 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 拓扑排序
- 如何编写更棒的代码:11个核心要点
- matlab_图片,视频,摄像头的读取和显示
- 郑州金水中医院收费高不高
- 单源最短路径算法 Bellman-Ford && SPFA 及 最短路算法统一归纳
- 关于MKNetworkKit的一些问题
- POJ 3687:Labeling Balls(优先队列+拓扑排序)
- 内存管理 之 存储器硬件知识
- xmpp错误码
- 用sed展开文件内容
- 查看NDK调用栈方法
- Qt编程24:QTreeWidget简单使用
- usb中的endpoint(端点)和传输模式
- 高并发的解决策略
- phpnow安装apache失败及phpnow绑定域名解决方法,网站发布到外网