NOIP2010 关押罪犯
2015-09-23 23:37
330 查看
传送门
https://vijos.org/p/1776题目大意
额,自己看吧题解
对于这种有对立关系(只有1对)的时候,我们考虑拆点x拆为x和x+n
按数值排序后,倒序合并,a和b+n以及b和a+n合并,如果a和b在一个集合中那么输出当前值
注意无冲突情况输出0
var x:array[0..100005,0..3]of longint; fa:array[0..40000]of longint; i,j,k:longint; n,m,a,b:longint; procedure sort(l,r: longint); var i,j,k,a,y: longint; begin i:=l; j:=r; a:=x[(l+r) div 2,3]; repeat while x[i,3]<a do inc(i); while a<x[j,3] do dec(j); if not(i>j) then begin for k:=1 to 3 do begin y:=x[i,k]; x[i,k]:=x[j,k]; x[j,k]:=y; end; inc(i); dec(j); end; until i>j; if l<j then sort(l,j); if i<r then sort(i,r); end; function get(a:longint):longint; begin if fa[a]=a then exit(a); fa[a]:=get(fa[a]); exit(fa[a]); end; begin readln(n,m); for i:=1 to m do readln(x[i,1],x[i,2],x[i,3]); sort(1,m); {x[i,3]} for i:=1 to 2*n do fa[i]:=i; for i:=m downto 1 do begin a:=get(x[i,1]); b:=get(x[i,2]); if a=b then begin writeln(x[i,3]); halt; end else begin fa[a]:=get(x[i,2]+n); fa[b]:=get(x[i,1]+n); end; end; writeln(0); end.
相关文章推荐
- c++ primer第五版(中文)习题答案 第十章第三节第一小节-向算法传递函数
- 两道有意思的题目
- Java 设计模式(4)适配器模式
- 类的函数调用——总结 某东 面试
- VMware安装Linux ubuntu虚拟机
- JavaScript的DOM编程--02--获取元素节点
- 和大家分享C语言中几个知识点
- 【POJ3749】:破译密码
- Xcode7 使用NSURLSession发送HTTP请求报错
- 转:高性能Mysql主从架构的复制原理及配置详解
- 【HDU 4162】Shape Number(一阶差分链码+最小表示法)
- 《一课经济学》书摘笔记I
- 深入PHP内核之参数
- 汉诺塔
- 面对对象思想2
- 带你玩转Visual Studio——带你新建一个工程
- 2015第39周三
- Linux 入门常用命令
- Ubuntu 下 安装QQ 截图工具
- 第一行代码笔记2