poj 3687(拓扑排序)
http://poj.org/problem?id=3687
题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签。如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的前面比后的要请,而且这n个球的重量也正好是分布在1-n这个范围内,现在要你求出他们各自所占的重量。
思路:最开始,我也是想到了用拓扑排序,但是它的入度值我确定不了,然后去看discuss,里面说对每个判断条件反向建图,然后在用最大优先队列。我不理解这是什么意思。然后看了下别人的博客,模拟了一下大概的过程。
比如说
4 1
4 1
那么答案是2 3 4 1
反向建图,那么也就是digree[ 4 ] ++;
然后,其他的数入度值都是为0,所以都进优先队列。
那么现在优先队列就是有 1 2 3 这三个数。
然后,location[ 3 ] = 4;
再去寻找有没有与3相比较过的数。
然后, location[ 2 ] = 3;
再去找有没有与2相比较过的数。
然后,location[ 1 ] = 2;
再去找有没有与1比较过的数,如果有的话,把那么数入队列,那么4就入了队列。
然后,location[ 4 ] = 1;
然后反向输出,这就是结果,而那么 4 3 2 1 这是怎么来的呢,首先用一个变量num等于n。
然后每使用一次,这个变量就--。上面的也就是相当于 location[ 3 ] = 4 --。
1 #include <stdio.h> 2 #include <string.h> 3 #include <queue> 4 #define maxn 210 5 6 using namespace std; 7 8 int digree [ maxn ]; //这个就是入度值。 9 int judge [ maxn ][ maxn ]; //这个是用来判断有没有重边的。 10 int location [ maxn ]; 11 int m,n; 12 13 priority_queue<int >s; //这个是默认的最大优先队列。 14 15 int topsort() 16 { 17 int num = n; 18 for( int i = 1 ; i <= n ; i++ ) 19 if(!digree[ i ]) s.push( i ); 20 if( s.empty() ) return 0; //如果没有入度为0的,则说明构成了一个环。 21 while( !s.empty() ) 22 { 23 int tmp =s.top(); 24 s.pop(); 25 location [ tmp ] = num--; 26 for( int i = 1 ; i <= n ; i++ ) 27 { 28 if( judge[ i ][ tmp ] ) 29 { 30 judge[ i ][ tmp ] = 0; 31 digree[ i ] --; 32 if( !digree[ i ] ) s.push( i ); 33 } 34 } 35 } 36 if( num != 0 ) return 0; //如果这里Num 不能等于0,那么说明最少还有两个是无法确定的。 37 return 1; 38 } 39 40 41 int main() 42 { 43 int t,a,b; 44 scanf("%d",&t); 45 while( t -- ) 46 { 47 memset( digree , 0 , sizeof( digree ) ); 48 memset( judge , 0 , sizeof( judge ) ); 49 memset( location , 0 , sizeof( location ) ); 50 scanf("%d%d",&n,&m); 51 for( int i = 1 ; i <= m ; i ++ ) 52 { 53 scanf("%d%d",&a,&b); 54 if(judge[ a ][ b ] > 0) continue; //判重。 55 judge[ a ][ b ] = 1; 56 digree [ a ] ++; 57 } 58 a = topsort(); 59 if( a ) { 60 int i = 1; 61 for( ; i < n ; printf("%d ",location[ i++ ]) ); 62 printf("%d\n",location[ i ]); 63 } 64 65 else printf("-1\n"); 66 } 67 return 0; 68 }
转载于:https://www.cnblogs.com/Tree-dream/p/5748312.html
poj 3687(拓扑排序)相关推荐
- POJ 3687 拓扑排序
一个比较慢的算法. 反向拓扑,从大到小枚举. #include <cstdio> #include <cstring> using namespace std; int cas ...
- poj 4084:拓扑排序
poj 4084:拓扑排序 非常好的题目,恶心的算法 描写叙述 给出一个图的结构,输出其拓扑排序序列,要求在同等条件下.编号小的顶点在前. 输入 若干行整数,第一行有2个数,分别为顶点数v和弧数a,接 ...
- Poj 1094 拓扑排序Kahn
Poj 1094 拓扑排序Kahn Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4133 ...
- POJ 1094 拓扑排序
题意大坑,建议先看Discuss-- 否则代码写得就像以下的一团糟.... 其实并不难,拓扑排序+乱搞就可以AC. // by SiriusRen #include <cstdio> #i ...
- 【题解】(图论) —— POJ 0719:拓扑排序
题目链接:OpenJudge - 0719:拓扑排序 总时间限制: 10000ms 内存限制: 1000kB 描述 给出一个图的结构,输出其拓扑排序序列,要求在同等条件下,编号小的顶点在前 输入 若干 ...
- [POJ] 3687 Labeling Balls(拓扑排序)
题目地址:http://poj.org/problem?id=3687 反向建边,即重的球指向轻的球,注意重边,然后拓扑排序.从n-->1循环,即每次从入度为0的球里面选编号大的存(包含输入的逻 ...
- 拓扑排序 POJ - 3687反向图跑字典序(重边)
题目链接:http://poj.org/problem?id=3687 题目大意: 给定N个球,这些球的编号分别是1-N中的某个数字,它们的重量也分别是1-N中的某个数字,任意两个球的编号和重量不相等 ...
- POJ 3687 Labeling Balls【拓扑排序】
题意: 有 n 个球,想要对他们进行编号1..n,知道了一些求的轻重的关系,要求轻的球必须排在重的球之前,如果存在没有冲突的排序方法的话,输出字典序最小的排序方式. 分析: 没考虑重边,WA了N次!! ...
- 图论之拓扑排序 poj 2367 Genealogical tree
题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...
最新文章
- 组件命名方式||局部组件注册:局部组件只能在注册他的父组件中使用
- 李永乐线性代数2020年基础课手写笔记汇总
- 安装mysql-connector-python-8.0.11-py3.6遇到问题
- 【JAVA 第四章 流程控制语句】课后习题 直线斜率 以及判断坐标是否在直线上点到直线的距离
- python的复数实部和虚部都是整数_Python(一)
- 2021年中国带锯机市场趋势报告、技术动态创新及2027年市场预测
- 构建指定仓库_使用Travis CI自动构建和部署你的GitBook
- 使用 typescript ,提升 vue 项目的开发体验(2)
- ValueError: output parameter for reduction operation logical_and has too many dimensions ?
- 【华为机试 Python实现】VLAN资源池
- windows错误代码一览表
- 美国弗吉尼亚大学计算机科学,2017美国弗吉尼亚大学计算机科学专业
- 67.Python修炼之路【72-前端-HTML列表】2018.06.28
- 10005---数据采集与埋点
- uedit 富文本编辑器 图片上传 图片服务器
- python 自动播放_在IPython noteb中自动播放声音
- Spring Boot 错题本
- HWND CDC HDC的转换
- 【小白篇】从零开始搭建传奇服务器(只做自我娱乐之用)
- 虚树学习笔记(洛谷2495 消耗战)
热门文章
- TI C2000 刷flash意外锁芯片的解决办法
- 复旦计算机教师,复旦教师:我有无人能及的相声天赋
- 计算机网速单位是什么,计算机存储单位和网络网速单位
- phpwind mysql 密码_PhpWind教程:MySQL数据库密码修改方法
- python下载arcgis地图_使用下载器下载适用于arcgis的离线地图切片
- 第七届科技节获奖及建模论文相似度名单公示
- 基于 MATLAB fitcsvm 的 OVR SVM 多分类器实现
- HTML5中图片路径的几种使用方式
- EXCEL查找字符串里是不是存在某个字符,并对存在的字符进行操作 if find
- POJ Haybale Guessing