【poj1733】Parity game--边带权并查集
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 15776 | Accepted: 5964 |
Description
You suspect some of your friend's answers may not be correct and you want to convict him of falsehood. Thus you have decided to write a program to help you in this matter. The program will receive a series of your questions together with the answers you have received from your friend. The aim of this program is to find the first answer which is provably wrong, i.e. that there exists a sequence satisfying answers to all the previous questions, but no such sequence satisfies this answer.
Input
Output
Sample Input
10
5
1 2 even
3 4 odd
5 6 even
1 6 even
7 10 odd
Sample Output
3
Source
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%s",&e[i].l, &e[i].r, s+1);
e[i].opt=(s[1]=='o'? 1 : 0);
b[++cnt]=e[i].l-1;
b[++cnt]=e[i].r;
}
sort(b+1,b+cnt+1);
int len=unique(b+1 ,b +cnt+1)-b-1;
for(int i=1;i<=len;i++)fa[i]=i; int x=lower_bound(b+1,b+len+1,e[i].l-1)-b;
int y=lower_bound(b+1,b+len+1,e[i].r)-b;
之后:
我们可以用边带权并查集,边权d[x]为零,表明x到fa[x]的奇偶性相同,为1则不同。在路径压缩时,对x到根的路径上的边权异或运算,即可得出x与树根的奇偶性关系。
合并时x与y的奇偶性关系ans=d[x] xor d[y] xor d[p].
所以 d[p] = d[x] xor d[y] xor ans
int find(int x)
{
if(x==fa[x])return fa[x];
int f=find(fa[x]);
d[x]^=d[fa[x]];
return fa[x]=f;
}
代码:
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define N 10000000
using namespace std;
int d[N],b[N],n,m,cnt,tot,fa[N];
struct node
{
int l,r,opt;
}e[N<<1];
char s[10];
int find(int x)
{
if(x==fa[x])return fa[x];
int f=find(fa[x]);
d[x]^=d[fa[x]];
return fa[x]=f;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%s",&e[i].l, &e[i].r, s+1);
e[i].opt=(s[1]=='o'? 1 : 0);
b[++cnt]=e[i].l-1;
b[++cnt]=e[i].r;
}
sort(b+1,b+cnt+1);
int len=unique(b+1 ,b +cnt+1)-b-1;
for(int i=1;i<=len;i++)fa[i]=i;
for(int i=1;i<=m;i++)
{
int x=lower_bound(b+1,b+len+1,e[i].l-1)-b;
int y=lower_bound(b+1,b+len+1,e[i].r)-b;
int fx=find(x),fy=find(y);
if(fx==fy)
{
if((d[x] ^ d[y])!=e[i].opt)
{
printf("%d\n",i-1);
return 0;
}
}
else
{
fa[fx]=fy;
d[fx]=d[x]^d[y]^e[i].opt;
}
}
printf("%d\n",m);
return 0;
}
【poj1733】Parity game--边带权并查集的更多相关文章
- poj1733 Parity game[带权并查集or扩展域]
地址 连通性判定问题.(具体参考lyd并查集专题该题的转化方法,反正我菜我没想出来).转化后就是一个经典的并查集问题了. 带权:要求两点奇偶性不同,即连边权为1,否则为0,压缩路径时不断异或,可以通过 ...
- P2661 信息传递[最小环+边带权并查集]
题目来源:洛谷 题目描述 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 Ti 的同学. 游戏 ...
- 【luoguP1196】 [NOI2002]银河英雄传说--边带权并查集 ,
题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...
- 边带权并查集 学习笔记 & 洛谷P1196 [NOI2002] 银河英雄传说 题解
花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就 ...
- URAL - 1003:Parity (带权并查集&2-sat)
Now and then you play the following game with your friend. Your friend writes down a sequence consis ...
- POJ1733 Party game [带权并查集or扩展域并查集]
题目传送 Parity game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10870 Accepted: 4182 ...
- POJ 1773 Parity game 带权并查集
分析:带权并查集,就是维护一堆关系 然后就是带权并查集的三步 1:首先确定权值数组,sum[i]代表父节点到子节点之间的1的个数(当然路径压缩后代表到根节点的个数) 1代表是奇数个,0代表偶数个 2: ...
- POJ 1733 Parity game (带权并查集)
题意:有序列A[1..N],其元素值为0或1.有M条信息,每条信息表示区间[L,R]中1的个数为偶数或奇数个,但是可能有错误的信息.求最多满足前多少条信息. 分析:区间统计的带权并查集,只是本题中路径 ...
- AcWing 238.银河英雄传说 (边带权并查集)
题意:有\(n\)列,有\(T\)条指令,若指令格式为\(M\),则将第\(i\)号的所有战舰移到第\(j\)号所在列的后面,若指令格式为\(C\),询问\(i\)和\(j\)是否在同一列,如果在,问 ...
随机推荐
- php7和PHP5对比的新特性和性能优化
1 抽象语法树( AST) 1)在 PHP5中,从 php 脚本到 opcodes 的执行的过程是: Lexing:词法扫描分析,将源文件转换成 token 流: Parsing:语法分析,在 ...
- Kali Linux安装AWVS漏扫工具
Acunetix是全球排名前三的漏洞发现厂商,其全称(Acunetix Web Vulnerability Scanner)AWVS是业内领先的网络漏洞扫描器,其被广泛赞誉为包括最先进的SQL注入和X ...
- Pytorch中的自编码(autoencoder)
Pytorch中的自编码(autoencoder) 本文资料来源:https://www.bilibili.com/video/av15997678/?p=25 什么是自编码 先压缩原数据.提取出最有 ...
- Ubuntu16.04 + caffe + cuda 环境搭建
1. sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-de ...
- asp.net frameworke处理程序的作用
1 向客户端发送响应的工作都由处理程序完成 2 任何实现System.web.ihttpHandler接口的类都可以作为传入的http请求的目标 3 如果需要重复使用自定义处理程序对象,需要创建自定义 ...
- JPA中的复杂查询
JPQL全称Java Persistence Query Language 基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在 ...
- RobHess的SIFT代码解析步骤二
平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32 主要参考:1.代码:RobHess的SIFT源码 2.书:王永明 ...
- 十六, k8s集群资源需求和限制, 以及pod驱逐策略。
目录 容器的资源需求和资源限制 QoS Classes分类 Guaranteed Burstable Best-Effort kubernetes之node资源紧缺时pod驱逐机制 Qos Class ...
- windows下虚拟python环境
Windows虚拟环境 cd %HOMEDRIVE%%HOMEPATH%\Desktop python3 -m venv venv 环境变量修改脚本bat,把脚本放到%HOMEDRIVE%%HOM ...
- 一图一知-TS的基本数据类型