POJ 1733 Parity game(种类并查集)
http://poj.org/problem?id=1733
题意:
给出一个01串,有多次询问,每次回答[l,r]这个区间内1的个数的奇偶性,但是其中有一些回答是错误的,问到第几个回答时与前面的回答是有矛盾的。
思路:
任意一个区间要么是奇要么就是偶。所有就可以用种类并查集来解决。
因为是区间,所以如果要连起来的话,每个区间的左端点需要减1。
因为n很大但是询问少,所有需要离散化处理。
下面的代码中,1表示奇,0表示偶。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = *; int n,q,tot;
int p[maxn],re[maxn],a[maxn]; //0表示偶,1表示奇 struct node
{
int l, r;
char s[];
}query[maxn]; int finds(int x)
{
if(p[x]==x) return x;
int tmp = p[x];
p[x] = finds(p[x]);
re[x] = (re[x]+re[tmp])%;
return p[x];
} void unions(int l,int r,int x, int y,int tmp)
{
if(x<y)
{
p[x] = y;
re[x] = (re[r]-re[l]+tmp+)%;
}
else
{
p[y] = x;
re[y] = (re[l] - re[r]-tmp+)%;
}
} int main()
{
//freopen("in.txt","r",stdin);
tot = ;
scanf("%d%d",&n,&q);
for(int i=;i<=maxn;i++) {p[i] = i;re[i]=;}
for(int i=;i<=q;i++)
{
scanf("%d%d%s",&query[i].l,&query[i].r,query[i].s);
query[i].l--;
a[++tot] = query[i].l;
a[++tot] = query[i].r;
}
sort(a+,a+tot+);
int num = unique(a+,a+tot+)-(a+);
int i;
for(i=;i<=q;i++)
{
int l = lower_bound(a+,a+num+,query[i].l)-(a+);
int r = lower_bound(a+,a+num+,query[i].r)-(a+);
int x = finds(l);
int y = finds(r);
int tmp = ;
if(query[i].s[]=='o') tmp = ;
if(x==y)
{ if((re[l]-re[r]+)%!=tmp) break;
}
else
{
unions(l,r,x,y,tmp);
}
}
printf("%d\n",i-);
return ;
}
POJ 1733 Parity game(种类并查集)的更多相关文章
- POJ - 1733 Parity game 种类并查集+离散化
思路:d(i, j)表示区间(i, j]的1的个数的奇偶性.输入最多共有5000*2个点,需要离散化处理一下.剩下的就是并查集判冲突. AC代码 #include <cstdio> #in ...
- POJ1733 Parity game —— 种类并查集
题目链接:http://poj.org/problem?id=1733 Parity game Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- poj 1182:食物链(种类并查集,食物链问题)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44168 Accepted: 12878 Description ...
- poj 1182 食物链(种类并查集 ‘初心者’)
题目链接:http://poj.org/problem?id=1182 借着这题可以好好理解一下种类并查集,这题比较简单但挺经典的. 题意就不解释了,中问题. 关于种类并查集结局方法也是挺多的 1扩增 ...
- POJ 1182 食物链(种类并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 63592 Accepted: 18670 Description ...
- POJ 1182 食物链 (种类并查集)
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...
- POJ 1417 True Liars(种类并查集+dp背包问题)
题目大意: 一共有p1+p2个人,分成两组,一组p1,一组p2.给出N个条件,格式如下: x y yes表示x和y分到同一组,即同是好人或者同是坏人. x y no表示x和y分到不同组,一个为好人,一 ...
- POJ 1182——食物链——————【种类并查集】
食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status P ...
- POJ 2912 Rochambeau(种类并查集+枚举)
题目链接:http://poj.org/problem?id=2912 题目大意:n个人玩,玩石头剪刀布游戏,其中1人是裁判,剩下的n-1个人分为3组, 他们商量好了,相同组的人每次都出相同的手势,不 ...
- POJ 1988 Cube Stacking (种类并查集)
题目地址:POJ 1988 这道题的查找合并的方法都能想的到,就是一点没想到,我一直天真的以为查询的时候,输入后能立即输出,这种话在合并的时候就要所有的结点值都要算出来,可是经过路径压缩之后,没办法所 ...
随机推荐
- 校正PHP服务器时间不准的问题
关于怎样解决PHP服务器时间不准的问题,得针对不同的情况进行不同的处理. 下面是经常遇到的情况,及应对办法. 1.PHP服务器时区不对,使用下面代码修正: <?php $timezone = & ...
- Radio中REG
Auto REG/REG OFF在广播接收质量不好时,收音机首先仅调整到该广播电台当前发射的可选频率.但是,如果接收质量差到“该发射电台濒临消失”的程度,则收音机也会接收德国NDR1(北德意志广播电台 ...
- 自学Java第二周的总结
在这一周里我在网上学习了java的对象和类,了解了对象与类以及简单的用法.对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴. ...
- onclick或者其他事件在部分移动端无效的问题
最近开发碰到一个问题,大多数手机都可以正常访问点击,但是有部分手机onclick无效,不知道可能是什么原因?该如何解决? 我遇到的这个问题,实际不是onclick的原因,而是因为js里面包含es6的语 ...
- GROUP BY 和 ORDER BY 同时使用问题
GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面.
- spring总结之三(依赖注入)
DI(重要):依赖注入(Dependency Injection).一般情况下,一个类不可能独立完成一个复杂的业务,需要多个类合作共同完成,需要在类中调用其它类的方法,就要给对象赋值,程序在执行过程中 ...
- show processlist命令与kill 线程
show [full] processlist show processlist显示正在运行的线程.如果有process权限,则可以查看所有正在运行的线程.否则,只能看到自己的线程.如果不使用full ...
- zabbix 监控Nginx和PHP
原理 Nginx和PHP(5.3及以上版本)都自带了一个状态页,默认没有开启,通过开启这个状态页即可获取实时的工作状态. Nginx状态获取 Nginx的配置默认是拒绝通过IP来访问,我们可以再默认虚 ...
- Golang字符串函数认识(二)
package main import ( "fmt" "strings" ) func main(){ //返回字符在指定字符串中最后一次出现的位置 last ...
- jquery .width和css("width", )区别
1.$.fn.width会根据是否是borderBox来计算新的宽度,如果是borderBox,会额外加上padding和border的宽度,计算时只是按照px来,用rem做单位会出错: 2.$.fn ...