题面

Poj

题解

反正只要你判断是否满足区间的奇偶性,假设每一位要么是$1$要么是$0$好了。

假设有$S$的前缀和为$sum[]$,则有:

若$S[l...r]$中有奇数个$1$,则$sum[l-1]$与$sum[r]$不同奇偶;反之,则同奇偶

用一个带权并查集维护,设权值数组$s[i]$表示区间$[root[i]...i]$的和的奇偶性。

对于一个区间$[l,r]$,分情况讨论:

如果$root[l]=root[r]$,直接判断就行了。

否则的话,计算一下$s[fv]=t\oplus s[u]\oplus s[v]$

但是$n$太大了,需要离散化(懒人离散化用$map$,美滋滋)

#include <map>
#include <cstdio>
#include <cstring>
using std::map;
typedef long long ll; const ll N = 1e4 + 10, Q = 5e3 + 10;
ll n, q, s[N], f[N], cnt;
map <ll, ll> m; ll find (ll x) {
if(f[x] == -1) return x;
ll tmp = find(f[x]);
s[x] ^= s[f[x]];
return f[x] = tmp;
} ll insert (ll x) {
if (m.find(x) == m.end()) m[x] = ++cnt;
return m[x];
} int main() {
while (scanf ("%lld%lld", &n, &q) != EOF) {
char str[4];
memset(f, -1, sizeof f);
memset(s, 0, sizeof s);
ll ans = q;
for (register ll i = 1, u, v; i <= q; ++i) {
scanf ("%lld%lld%s", &u, &v, str);
if (ans < q) continue;
u = insert(u - 1), v = insert(v);
ll fu = find(u), fv = find(v);
ll t = 0;
if (str[0] == 'o') ++t;
if (fu == fv) { //root相等
if (s[u] ^ s[v] != t)
ans = i - 1;
} else { //一定有fu<fv(编号比较)
f[fv] = fu;
s[fv] = s[u] ^ s[v] ^ t;
//矢量的异或运算
}
}
printf ("%lld\n", ans);
}
return 0;
}

Poj1733 Parity Game(带权并查集)的更多相关文章

  1. poj1733 Parity game[带权并查集or扩展域]

    地址 连通性判定问题.(具体参考lyd并查集专题该题的转化方法,反正我菜我没想出来).转化后就是一个经典的并查集问题了. 带权:要求两点奇偶性不同,即连边权为1,否则为0,压缩路径时不断异或,可以通过 ...

  2. URAL - 1003:Parity (带权并查集&2-sat)

    Now and then you play the following game with your friend. Your friend writes down a sequence consis ...

  3. POJ1733 Party game [带权并查集or扩展域并查集]

    题目传送 Parity game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10870   Accepted: 4182 ...

  4. POJ 1773 Parity game 带权并查集

    分析:带权并查集,就是维护一堆关系 然后就是带权并查集的三步 1:首先确定权值数组,sum[i]代表父节点到子节点之间的1的个数(当然路径压缩后代表到根节点的个数) 1代表是奇数个,0代表偶数个 2: ...

  5. POJ 1733 Parity game (带权并查集)

    题意:有序列A[1..N],其元素值为0或1.有M条信息,每条信息表示区间[L,R]中1的个数为偶数或奇数个,但是可能有错误的信息.求最多满足前多少条信息. 分析:区间统计的带权并查集,只是本题中路径 ...

  6. 【poj1733】Parity game--边带权并查集

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15776   Accepted: 5964 Description Now ...

  7. POJ1733 Parity game 【带权并查集】*

    POJ1733 Parity game Description Now and then you play the following game with your friend. Your frie ...

  8. POJ1733:Parity Game(离散化+带权并查集)

    Parity Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12853   Accepted: 4957 题目链接 ...

  9. POJ-1733 Parity game(带权并查集区间合并)

    http://poj.org/problem?id=1733 题目描述 你和你的朋友玩一个游戏.你的朋友写下来一连串的0或者1.你选择一个连续的子序列然后问他,这个子序列包含1的个数是奇数还是偶数.你 ...

随机推荐

  1. 【Luogu】P3933 Chtholly Nota Seniorious

    [题意]将n*m矩阵分成两个区域,要求满足一定条件,求两区域内部极差较大值最小.n,m<=2000 [算法]二分 [题解]极差的数值满足单调性,所以考虑二分极差. 对于给定的极差,将所有数值排序 ...

  2. JS之递归(例题:猴子吃桃)

    例题1:公园里有200个桃子,猴子每天吃掉一半以后扔掉一个,问6天以后还剩余多少桃子? var sum = 200; for(var i= 0;i<6;i++) { sum = parseInt ...

  3. [Unity]在Shader中获取摄像机角度、视线的问题

    又踩了一坑,好在谷歌到了之前的一个人遇到相同的问题,顺利解决. 先说说问题背景,我目前的毕设是体数据渲染,实现的办法是raycast.最基本的一点就是在fragment program里,获取rayc ...

  4. VMware 12安装虚拟机Mac OS X 10.10不能上网问题

    1:从本机中选择打开连接网络,选择本地连接.如果是无线网可以选择无线网. 1:  2: 控制面板--->网络和共享中心 2:选择属性,点击共享按钮. 3:将internet连接共享下面选项都选中 ...

  5. Vue 定义组件模板的七种方式(一般用单文件组件更好)

    在 Vue 中定义一个组件模板,至少有七种不同的方式(或许还有其它我不知道的方式): 字符串 模板字面量 x-template 内联模板 render 函数 JSF 单文件组件 在这篇文章中,我将通过 ...

  6. hdu 1548 A strange lift (dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 题目大意:升降电梯,先给出n层楼,然后给出起始的位置,即使输出从A楼道B楼的最短时间. 注意的几 ...

  7. Msfvenom学习总结-MSF反弹webshell

    1.    –p (- -payload-options) 添加载荷payload. 载荷这个东西比较多,这个软件就是根据对应的载荷payload生成对应平台下的后门,所以只有选对payload,再填 ...

  8. 從 kernel source code 查出 版本號碼

    kernel/Makefile 1 VERSION = 4 2 PATCHLEVEL = 4 3 SUBLEVEL = 21 4 EXTRAVERSION = 5 NAME = Blurry Fish ...

  9. spring restTemplate 用法

    发出get请求,方式一 String url = serverUrl+"/path/path?id={id}"; int i = restTemplate.getForObject ...

  10. PHP的数据类型

      原始类型共8种: 1,  4种标量类型:boolean(布尔型).integer(整形).float/double(浮点型).string(字符串型): 2,  2种复合型:array(数组).o ...