bzoj 4195: [Noi2015]程序自动分析 hash+并查集
来源:互联网 发布:程序员必读书单 搞笑 编辑:程序博客网 时间:2024/04/24 02:25
Description
在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。
考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。
现在给出一些约束满足问题,请分别对它们进行判定。
Input
输入文件的第1行包含1个正整数t,表示需要判定的问题个数。注意这些问题之间是相互独立的。
对于每个问题,包含若干行:
第1行包含1个正整数n,表示该问题中需要被满足的约束条件个数。
接下来n行,每行包括3个整数i,j,e,描述1个相等/不等的约束条件,相邻整数之间用单个空格隔开。若e=1,则该约束条件为xi=xj;若e=0,则该约束条件为xi≠xj。
Output
输出文件包括t行。
输出文件的第k行输出一个字符串“YES”或者“NO”(不包含引号,字母全部大写),“YES”表示输入中的第k个问题判定为可以被满足,“NO”表示不可被满足。
Sample Input
2
2
1 2 1
1 2 0
2
1 2 1
2 1 1
2
1 2 1
1 2 0
2
1 2 1
2 1 1
Sample Output
NO
YES
YES
HINT
在第一个问题中,约束条件为:x1=x2,x1≠x2。这两个约束条件互相矛盾,因此不可被同时满足。
在第二个问题中,约束条件为:x1=x2,x2=x1。这两个约束条件是等价的,可以被同时满足。
1≤n≤1000000
1≤i,j≤1000000000
这题一看就是并查集,但是数字之大让人有点无法下手,一般人的思路就是离散化,但是想想如果有专门卡快排的数据的话估计过不了(据说还是能过),于是就用hash来代替离散化,再就是裸并查集了。
代码:
const r=2999999;var flag:boolean; n,t,l,i,p,q:longint; x,y,z:array[1..1000000] of longint; a,f:array[0..r-1] of longint;function find(x:longint):longint;begin if f[x]=x then exit(x); find:=find(f[x]); f[x]:=find;end;function hash(x:longint):longint;var i:longint;begin i:=x mod r; if (a[i]=0)or(a[i]=x) then begin a[i]:=x; exit(i); end; while (a[i]<>x)and(a[i]>0) do i:=(i+1) mod r; a[i]:=x; hash:=i;end;begin readln(t); for l:=1 to t do begin fillchar(a,sizeof(a),0); readln(n); for i:=0 to r-1 do f[i]:=i; for i:=1 to n do begin readln(x[i],y[i],z[i]); if z[i]=1 then begin p:=find(hash(x[i])); q:=find(hash(y[i])); if p<>q then f[p]:=q; end; end; flag:=true; for i:=1 to n do if z[i]=0 then if find(hash(x[i]))=find(hash(y[i])) then begin flag:=false; break; end; if flag then writeln('YES') else writeln('NO'); end;end.
0 0
- bzoj 4195: [Noi2015]程序自动分析 hash+并查集
- BZOJ 4195: [Noi2015]程序自动分析 哈希表 并查集
- BZOJ 4195 [Noi2015]程序自动分析 并查集
- bzoj 4195: [Noi2015]程序自动分析 (并查集+离散化)
- NOI2015 day1 prog 程序自动分析(并查集)
- 【NOI2015】【程序自动分析】【并查集+离散化】
- [BZOJ4195] [NOI2015] 程序自动分析 - 并查集 + 离散化
- [NOI2015] BZOJ4195 程序自动分析-离散化-并查集
- [bzoj4195][NOI2015]程序自动分析 离散化 并查集
- 【BZOJ4195】【NOI2015】程序自动分析(并查集)
- BZOJ 4195 [Noi2015] 程序自动分析
- BZOJ 4195 [Noi2015]程序自动分析
- 【并查集】【NOI 2015】【bzoj 4195】程序自动分析
- 【NOI2015】BZOJ4195程序自动分析(并查集+离散化)
- BZOJ4195 [Noi2015]程序自动分析(离散化+并查集)
- codevs 4600 [NOI2015]程序自动分析(并查集+离散化)
- [BZOJ4195][NOI2015][并查集][离散化][水题]程序自动分析
- 并查集+map——BZOJ4195/Luogu1955 [Noi2015]程序自动分析
- Android中menu的基本用法
- IOS使用AFNetworking进行网络通信
- 海量Web日志分析 用Hadoop提取KPI统计指标
- 4.UIViewController
- RabbitMQ简介
- bzoj 4195: [Noi2015]程序自动分析 hash+并查集
- 2016 IT 互联网 各大公司内推
- HDU1093A+B for Input-Output Practice (V)(入门题C,Java两个版本)
- Ubuntu中鼠标部分的配置/etc/X11/xorg.conf
- Linux下区分物理CPU、逻辑CPU和CPU核数
- eclipse中maven的user-setting配置
- Implement Stack using Queues
- Hibernate查询时用HQL动态创建对象
- MD5加密实现