地址


连通性判定问题。(具体参考lyd并查集专题该题的转化方法,反正我菜我没想出来)。转化后就是一个经典的并查集问题了。

带权:要求两点奇偶性不同,即连边权为1,否则为0,压缩路径时不断异或,可以通过0或1得到两点的关系。合并时解一个位运算的方程,可得一个根连向另一个根的权值,看code,就不细讲了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define dbg(x) cerr<<#x<<" = "<<x<<endl
#define ddbg(x,y) cerr<<#x<<" = "<<x<<" "<<#y<<" = "<<y<<endl
using namespace std;
typedef long long ll;
template<typename T>inline char MIN(T&A,T B){return A>B?A=B,:;}
template<typename T>inline char MAX(T&A,T B){return A<B?A=B,:;}
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=+;
struct kishin_sagume{
int l,r,p;
}q[N];
int a[N<<],fa[N<<],d[N<<];
int L,n,m,x,y,fx,fy,flag,i;
inline int Get(int x){
if(fa[x]==x)return x;
int ret=Get(fa[x]);d[x]^=d[fa[x]];
return fa[x]=ret;
} int main(){//freopen("test.in","r",stdin);//freopen("test.out","w",stdout);
read(L),read(n);char s[];
for(i=;i<=n;++i){
read(q[i].l),read(q[i].r),a[++m]=--q[i].l,a[++m]=q[i].r;
scanf("%s",s);q[i].p=s[]=='o';
}
sort(a+,a+m+),m=unique(a+,a+m+)-a-;
for(i=;i<=m;++i)fa[i]=i;
for(i=;i<=n;++i){
x=lower_bound(a+,a+m+,q[i].l)-a,y=lower_bound(a+,a+m+,q[i].r)-a;
fx=Get(x),fy=Get(y);
if(fx^fy)fa[fx]=fy,d[fx]=q[i].p^d[x]^d[y];
else if(d[x]^d[y]^q[i].p)break;
}
return printf("%d\n",i-),;
}

扩展域:同奇偶时连奇数域和偶数域分别连边,否则交错,边的含义是可以产生关系,或者说可以推出。已知他是满足传递性的。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define dbg(x) cerr<<#x<<" = "<<x<<endl
#define ddbg(x,y) cerr<<#x<<" = "<<x<<" "<<#y<<" = "<<y<<endl
using namespace std;
typedef long long ll;
template<typename T>inline char MIN(T&A,T B){return A>B?A=B,:;}
template<typename T>inline char MAX(T&A,T B){return A<B?A=B,:;}
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=+;
struct matara_okina{
int l,r,p;
}q[N];
int a[N<<],fa[N<<];
int L,n,m,x,y,i;
inline int Get(int x){
return fa[x]^x?fa[x]=Get(fa[x]):x;
} int main(){//freopen("test.in","r",stdin);//freopen("test.out","w",stdout);
read(L),read(n);char s[];
for(i=;i<=n;++i){
read(q[i].l),read(q[i].r),a[++m]=--q[i].l,a[++m]=q[i].r;
scanf("%s",s);q[i].p=s[]=='o';
}
sort(a+,a+m+),m=unique(a+,a+m+)-a-;
for(i=;i<=(m<<);++i)fa[i]=i;
for(i=;i<=n;++i){
x=lower_bound(a+,a+m+,q[i].l)-a,y=lower_bound(a+,a+m+,q[i].r)-a;
if(q[i].p){
if(Get(x)==Get(y))break;
fa[Get(x)]=Get(y+m),fa[Get(x+m)]=Get(y);
}
else{
if(Get(x)==Get(y+m))break;
fa[Get(x)]=Get(y),fa[Get(x+m)]=Get(y+m);
}
}
return printf("%d\n",i-),;
}

poj1733 Parity game[带权并查集or扩展域]的更多相关文章

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

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

  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. POJ 1773 Parity game 带权并查集

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

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

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

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

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

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

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

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

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

  8. Poj1733 Parity Game(带权并查集)

    题面 Poj 题解 反正只要你判断是否满足区间的奇偶性,假设每一位要么是\(1\)要么是\(0\)好了. 假设有\(S\)的前缀和为\(sum[]\),则有: 若\(S[l...r]\)中有奇数个\( ...

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

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

随机推荐

  1. 《JavaScript》——DOM

    DOM (Document Object Model) 即文档对象模型, 针对 HTML 和 XML 文档的 API (应用程序接口) .DOM 描绘了一个层次化的节点树,执行开发者加入.移除和改动页 ...

  2. uwsgi报错:listen queue of socket ...

    Linux默认的socket链接为128,uwsgi默人的链接为100 需要修改系统默认的配置参数, 然后修改uwsgi配置:listen参数:1024

  3. 给js对象赋值,赋值key

    var pastResult = []; pastResult.push(feature.attributes.F_iID); pastResult.push(feature.attributes.F ...

  4. python实现接口测试到unittest框架集成

    接口测试是面试测试岗位基本都会问到的问题,但是对于一些刚做测试的小伙伴可能并不是很熟悉,也有可能了解接口测试,但是完全不知道接口自动化怎么做.下面我们大概介绍一下. 首先我们需要知道接口自动化测试的目 ...

  5. error_logger 爆炸

    具有讽刺意味的是,负责错误日志的进程竟然是最为脆弱的之一.在Erlang的缺省安装中,error_logger39负责记录日志(写入磁盘或者发送到网络上),它的速度要比错误产生的速度慢得多.尤其是在记 ...

  6. EasyNVR H5无插件摄像机直播解决方案前端解析之:如何在播放界面添加实时云台控制界面

    如何在播放器上加一个云台控制界面 问题: 对于实时直播的视频播放, 由于播放页面客观样式要求(一个播放器占据了整个页面),因此很难找出很合理的空间来放置其他功能按钮的位置(比如配合实时是平的云台控制界 ...

  7. JSON格式之GSON解析

    JSON格式之GSON解析 最近在做websocket相关,项目需要JSON解析.相较之下感觉google的GSON解析不错. JAVA后台 Gson提供了fromJson()方法来实现从Json相关 ...

  8. Spring自定义配置--ConfigurationProperties

    自定义配置的变量名: 在 *.properties 里面定义特定的变量 server.port=9000 amazon.associateId=habuma-20 建立Properties文件制定特定 ...

  9. PYTHON加密解密字符串

    依赖包安装部分 安装依赖包: pip install pycryptodome 在你的python环境中的下图红框路径中找到 crypto 将其改成 Crypto 代码部分 #!/usr/bin/en ...

  10. HDU - 1160 FatMouse's Speed 【DP】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意 给出一系列的 wi si 要找出一个最长的子序列 满足 wi 是按照升序排列的 si 是按 ...