<题目链接>

题目大意:

一个由0,1组成的序列,每次给出一段区间的奇偶,问哪一条信息不合法。

解题分析:

我们用s[i]表示前i个数的前缀和,那么a b even意味着s[b]和s[a-1]的奇偶性相同。a b odd意味着s[b]与s[a-1]的奇偶性不同。于是我们根据奇偶性的不同,用并查集依次处理他们之间的关系。当某条信息出现与并查集中记录的信息不符合时,则此信息不合法。

由于该序列的长度达到了1e9,并且查询次数只有5000次,所以我们需要对查询的区间进行离散化,否则存不下,数据比较小,用map离散化即可,也不会很慢。

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
using namespace std; #define RP(i,s,t) for(int i=s;i<=t;i++)
#define fastIO ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
const int N = 1e4 + ; int n, m, tot,fa[N + ], w[N + ];
map<int,int>mp; int find(int x){
if(x==fa[x])return x;
int tmp=fa[x];
fa[x]=find(fa[x]);
w[x]=(w[x]+w[tmp]+)%; //带权并查集关系的转移
return fa[x];
}
inline bool Union(int a,int b,int x){
int ra=find(a),rb=find(b);
if(ra!=rb){
fa[ra]=rb;
w[ra]=(w[a]-w[b]+x+)%;
}else{
if((w[a]-w[b]+)%!=x)return false; //与之前建立的关系奇偶性不符,则表示出现冲突
}return true;
}
int main() {
fastIO
cin >> n >> m;
RP(i, , N + ) fa[i] = i, w[i] = ;
int ans=;
RP(i,,m){
int a,b;string s;
cin>>a>>b>>s;--a; //因为根据的是前缀和的奇偶性,所以这里a要记得-1
if(!mp[a])mp[a]=++tot; //map用来离散化
if(!mp[b])mp[b]=++tot;
int k=(s=="odd")?:; //odd才是奇,容易搞错
if(Union(mp[a],mp[b],k))ans++;
else break;
}cout<<ans<<'\n';
}

2018-10-02

POJ 1733 Parity game 【带权并查集】+【离散化】的更多相关文章

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

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

  2. POJ 1773 Parity game 带权并查集

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

  3. poj 1733 Parity game(带权并查集+离散化)

    题目链接:http://poj.org/problem?id=1733 题目大意:有一个很长很长含有01的字符串,长度可达1000000000,首先告诉你字符串的长度n,再给一个m,表示给你m条信息, ...

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

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

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

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

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

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

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

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

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

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

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

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

  10. poj1733(带权并查集+离散化)

    题目链接:http://poj.org/problem?id=1733 题意:给定由0.1组成的数串长度n,询问次数m,每次询问给出a,b,s,表示区间[a,b]内1的数量为s(odd-奇数或even ...

随机推荐

  1. Swift可选项

  2. test pictures

    https://cnbj1.fds.api.xiaomi.com/mace/demo/mace_android_demo.apk

  3. java多线程快速入门(十七)

    多线程通讯实例(必须要有多个线程.必须要管理同一个变量:线程A生产一个变量,线程B消费一个变量) package com.cppdy; class User { public String usern ...

  4. java常见错误总结

    1. 现象:将数组转为List后进行removeAll()操作,报java.lang.UnsupportedOperationException错误. 代码: /** * 获取标记ID * @retu ...

  5. C++ Primer 笔记——拷贝控制

    1.如果构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数的第一个参数必须是引用类型(否则会无限循环的调用拷贝构造函数). 2.如果没有为一个类 ...

  6. Centos7搭建dhcp服务器

    实验拓扑: 实验步骤如下: 1.挂载本地镜像,并安装dhcp组件. 2.更改配置文件,并重启服务. . 3.配置dhcp地址池范围 4.配置防火墙 结果:在客户端上,重启网卡,后查看ip

  7. C#Enum用Tuple保存值绑定到前端的CheckBox

    //把数字转成枚举 public static T[] NumStringsToEnums<T>(string enumNumString ) //where T:Enum { if (s ...

  8. CentOS命令行向OSS上传文件或文件夹

    下载地址:https://helpcdn.aliyun.com/document_detail/50452.html?spm=a2c4g.11186623.4.2.KyQak3 百度云盘:https: ...

  9. web应用启动后发现被自动访问

    为了找到原因,做了以下操作,发现是eclipse访问的,但是具体原因未知

  10. Inflated 3D ConvNet 【I3D】

    Two-Stream Inflated 3D ConvNet (I3D) HMDB-51: 80.9% and UCF-101: 98.0% 在Inception-v1 Kinetics上预训练 Co ...