Parity game(带权并查集+离散化)
题目链接 //kuangbin
题意:
现在你和你的朋友正在玩一种游戏。 你的朋友写下一串0和1的序列,然后你选择其中一串子序列(如[3,5])并且问他这个序列是包含奇数个1还是偶数个1(和是奇数还是偶数)。 你可以问你的朋友任意个问题,而你的朋友会回答你的问题。 你的任务是猜出整个朋友的序列。但是,你发现你的朋友告诉你的信息可能有误,所以你想写一个程序来指出他的错误。这个程序应该接受一系列你的问题和答案。程序的目标是找到第一个错误的答案。
思路:
由之前做树状数组的题目经验得到,左区间可以-1,使得连贯起来。
因为1e9很大数组开不下,所以离散化(这一步要在左区间-1的步骤之后)。
带权。
#include<iostream>
#include<cstdio>
#include <cctype>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define ll long long
#define mem(a,x) memset(a,x,sizeof(a))
#define se second
#define fi first
const ll mod=;
const int INF= 0x3f3f3f3f;
const int N=2e5+; int n,m;
int f[N];
int book[N];
int sum[N];
vector<int>v; struct node
{
int f,s;
}a[N];
string str; int getf(int x)
{
if(x!=f[x])
{
int t=f[x];
f[x]=getf(f[x]);
sum[x]+=sum[t]; // 其实sum[x]^=sum[t]也行,更快,110ms
}
return f[x];
}
int main()
{
cin>>n>>m;
int ans=;
for(int i=;i<=N;i++) f[i]=i; for(int i=;i<=m;i++)
{
scanf("%d%d",&a[i].f,&a[i].s);
if(a[i].f>a[i].s) swap(a[i].f,a[i].s);
a[i].f--;
v.push_back(a[i].f);
v.push_back(a[i].s); cin>>str;
if(str[]=='o') book[i]=;
else book[i]=;
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()) , v.end()); for(int i=;i<=m;i++)
{
a[i].f= lower_bound(v.begin(),v.end(),a[i].f)-v.begin()+;
a[i].s= lower_bound(v.begin(),v.end(),a[i].s)-v.begin()+;
int f1=getf(a[i].f);
int f2=getf(a[i].s);
if(f1!=f2)
{
f[f1]=f2;
sum[f1]=sum[a[i].s]+book[i]-sum[a[i].f]; //sum[f1]=sum[a[i].s]^book[i]^sum[a[i].f]
ans++;
}
else
{
if( abs(sum[a[i].f]-sum[a[i].s]) % != book[i] ) break; //一定要abs。
else ans++;
}
}
cout<<ans<<endl; }
Parity game(带权并查集+离散化)的更多相关文章
- poj 1733 Parity game(带权并查集+离散化)
题目链接:http://poj.org/problem?id=1733 题目大意:有一个很长很长含有01的字符串,长度可达1000000000,首先告诉你字符串的长度n,再给一个m,表示给你m条信息, ...
- POJ 1773 Parity game 带权并查集
分析:带权并查集,就是维护一堆关系 然后就是带权并查集的三步 1:首先确定权值数组,sum[i]代表父节点到子节点之间的1的个数(当然路径压缩后代表到根节点的个数) 1代表是奇数个,0代表偶数个 2: ...
- poj1733(带权并查集+离散化)
题目链接:http://poj.org/problem?id=1733 题意:给定由0.1组成的数串长度n,询问次数m,每次询问给出a,b,s,表示区间[a,b]内1的数量为s(odd-奇数或even ...
- URAL - 1003:Parity (带权并查集&2-sat)
Now and then you play the following game with your friend. Your friend writes down a sequence consis ...
- POJ 1733 Parity game (带权并查集)
题意:有序列A[1..N],其元素值为0或1.有M条信息,每条信息表示区间[L,R]中1的个数为偶数或奇数个,但是可能有错误的信息.求最多满足前多少条信息. 分析:区间统计的带权并查集,只是本题中路径 ...
- 【poj1733】Parity game--边带权并查集
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15776 Accepted: 5964 Description Now ...
- poj1733 Parity game[带权并查集or扩展域]
地址 连通性判定问题.(具体参考lyd并查集专题该题的转化方法,反正我菜我没想出来).转化后就是一个经典的并查集问题了. 带权:要求两点奇偶性不同,即连边权为1,否则为0,压缩路径时不断异或,可以通过 ...
- poj 1733(带权并查集+离散化)
题目链接:http://poj.org/problem?id=1733 思路:这题一看就想到要用并查集做了,不过一看数据这么大,感觉有点棘手,其实,我们仔细一想可以发现,我们需要记录的是出现过的节点到 ...
- POJ1733:Parity Game(离散化+带权并查集)
Parity Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12853 Accepted: 4957 题目链接 ...
随机推荐
- 使用vs code开发.net core2.2时OmniSharp.MSBuild.ProjectLoader无法解析"xxx"的解决方法
如图: 都是常用的nuget包呢,怎么无法解析呢? 第一反应是环境问题,果断搜索,baidu.google.bing.github一顿好搜啊,竟没有找到答案,看来是掉进了一个黄金坑! 重装vscode ...
- 【tensorflow-v2.0】如何将模型转换成tflite模型
前言 TensorFlow Lite 提供了转换 TensorFlow 模型,并在移动端(mobile).嵌入式(embeded)和物联网(IoT)设备上运行 TensorFlow 模型所需的所有工具 ...
- c# .net framework 4.5.2 , Quartz.NET 3.0.7
参考了:https://www.cnblogs.com/personblog/p/11277527.html, https://www.jianshu.com/p/b8e7e4deb60a .NET ...
- openshift 使用curl命令访问apiserver
openshift版本:openshift v3.6.173.0.5 使用oc(同kubectl)命令访问apiserver资源的时候,会使用到/root/.kube/config文件中使用的配置. ...
- ProxyGenerator proxy = new ProxyGenerator(); 代理+拦截器模式
所谓代理,就是不直接访问目标对象,而是由中间对象生成一个目标代理类,由中间代理对象来代理目标对象的方法.Java里面有JDK和CGLIB代理.C#里面则使用Castle代理.nuget引用如下: &l ...
- java 字符串转json,json转实体对象、json字符串转换成List、List转String、以及List排序等等...
@RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @Resp ...
- day26——tyoe元类与object的联系、反射、函数与方法的区别、双下方法
day26 type元类与object联系 type 获取对象从属于的类 python 中一切皆对象, 类在某种意义上也是一个对象,python中自己定义的类,以及大部分内置类,都是由type元类(构 ...
- Spark实战电影点评系统(二)
二.通过DataFrame实战电影点评系统 DataFrameAPI是从Spark 1.3开始就有的,它是一种以RDD为基础的分布式无类型数据集,它的出现大幅度降低了普通Spark用户的学习门槛. D ...
- [cf 1236 E] Alice and the Unfair Game
题意: 给定一个长度为m的序列$A$,你有一个长度为n的棋盘,可以任选一个位置x作为起点. 在时刻$[1,m+1]$你可以向左或向右移动一格. 设时刻i你移动后所在的位置为$B_i$,你需要满足对于任 ...
- Codeforces Round #581 (Div. 2)
A:暴力. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm& ...