题意:有序列A[1..N],其元素值为0或1。有M条信息,每条信息表示区间[L,R]中1的个数为偶数或奇数个,但是可能有错误的信息。求最多满足前多少条信息。

分析:区间统计的带权并查集,只是本题中路径的运算是用模2或异或逻辑。而且需要注意的是,本题N可达1e9,但M只有5000,所以最多出现的坐标只有1e4,离散化处理。

区间[L,R]1的奇偶可转化为将L-1视作R的父亲节点,其距离就是1的奇偶。注意如果M条信息都正确,那么结果是M。

#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<map>
using namespace std;
typedef long long LL;
const int maxn =1e4+;
const int INF= 0x3f3f3f3f;
int fa[maxn];
int dist[maxn];
void init(int N)
{
for(int i=;i<=N;++i) fa[i]=i,dist[i]=;
} int Find(int x)
{
if(fa[x]==x) return x;
int f = fa[x];
fa[x] = Find(fa[x]);
dist[x] =(dist[x]+dist[f])%;
return fa[x];
} bool Union(int a,int b,int op)
{
int roota= Find(a),rootb = Find(b);
if(roota==rootb && (dist[a]+op)%!=dist[b]) return false;
fa[rootb] = roota;
dist[rootb] =(op+dist[a]-dist[b]+)%;
return true;
} map<int,int> dp; int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int T,N,M,Q,u,v,tmp,K;
int a,b;
char op[];
while(scanf("%d%d",&N,&M)==){
dp.clear();
init();
int cnt=,ans=;
for(int i=;i<=M;++i){
scanf("%d%d%s",&a,&b,op);
if(!dp[a-]) dp[a-]= cnt++;
if(!dp[b]) dp[b] = cnt++;
if(op[]=='e'){
if(!Union(dp[a-],dp[b],) && !ans) ans=i;
}
else{
if(!Union(dp[a-],dp[b],) && !ans) ans=i;
}
}
if(!ans) ans=M+;
printf("%d\n",ans-);
}
return ;
}

POJ 1733 Parity game (带权并查集)的更多相关文章

  1. POJ 1773 Parity game 带权并查集

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

  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 1182 食物链 【带权并查集】

    <题目链接> 题目大意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我 ...

  4. POJ 1182 食物链 (带权并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 78551   Accepted: 23406 Description ...

  5. POJ 1182 食物链 【带权并查集/补集法】

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...

  6. poj 1182 食物链【带权并查集】

    设相等的边权为0,吃的边权为,被吃的边权为2,然后用带权并查集在%3的意义下做加法即可 关系为简单环的基本都可以用模环长的方式是用带权并查集 #include<iostream> #inc ...

  7. A Bug's Life POJ - 2492 (种类或带权并查集)

    这个题目的写法有很多,用二分图染色也可以写,思路很好想,这里我们用关于并查集的两种写法来做. 题目大意:输入x,y表示x和y交配,然后判断是否有同性恋. 1 带权并查集: 我们可以用边的权值来表示一种 ...

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

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

  9. POJ 3228 Gold Transportation(带权并查集,好题)

    参考链接:http://www.cnblogs.com/jiaohuang/archive/2010/11/13/1876418.html 题意:地图上某些点有金子,有些点有房子,还有一些带权路径,问 ...

随机推荐

  1. Android Intent 用法全面总结(转载)

    1. [代码]调用拨号程序 1 2 3 4 // 给移动客服10086拨打电话 Uri uri = Uri.parse("tel:10086"); Intent intent = ...

  2. CentOS7.1 安装Liberty之环境准备(1)

    一.基础平台 1.一台装有VMware的windows系统(可联网) 2.CentOS 7.1 64bit镜像 二.最小化安装两台CentOS 7.1 的虚拟机controller.compute1, ...

  3. 将MathType公式粘贴到文档中的步骤

    MathType这款数学公式编辑器,常常是辅助于各种文档使用的.由于其编辑的公式与数学符号等都符号国际期刊的出版标准,并且上手容易,根本就不需要一个学习的过程,只要安装打开后就能直接上手使用.所以非常 ...

  4. ChemDraw进行自动调整的步骤

    说到化学绘图软件那就不得不提ChemDraw,起非常的经典在国内外都得到了普遍应用,最新版是ChemDraw 15.1 Pro.在使用ChemDraw化学绘图工具绘制化学图形的时候,需要循序渐进一步一 ...

  5. HBase的多节点集群详细启动步骤(3或5节点)(分为Zookeeper自带还是外装)

    HBase的多节点集群详细启动步骤(3或5节点)分为: 1.HBASE_MANAGES_ZK的默认值是false(zookeeper外装)(推荐) 2.HBASE_MANAGES_ZK的默认值是tru ...

  6. mvc中使用uploadify批量上传的应用

    网上找了很多资料都没有发现一个好用.可以用的uploadify批量上传的应用,这里通过官方和自己的一些项目需要整理了一个出来. 希望能帮助到需要的人. 效果图:

  7. 【BZOJ1264】[AHOI2006]基因匹配Match DP+树状数组

    [BZOJ1264][AHOI2006]基因匹配Match Description 基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而 ...

  8. myslq中插入时间当前时间

    create table classic_movie_info( id ) primary key auto_increment not null, movie_name varchar(), mov ...

  9. Eclipse MyBatis Generator插件安装

    目录 Eclipse MyBatis Generator插件安装 Eclipse MyBatis Generator插件安装 1.进入Eclipse Marketplace [Help] -> ...

  10. php strtok()函数用法,及使用时遇到的问题

    strtok()函数:用来将一段字符串分割为子字符串 strtok(string $str, string $token) strtok( string $token) //仅第一次调用$str,以后 ...