H - Parity game-poj1733(需要离散化)
题意:给一个序列这个序列都是由0和1组成,现在随意拿出来一个序列,然后说出他的和是奇数还是偶数,因为有可能存在假话,让你判断前多少条没有假话,也就是查找第一个假话的位置-1
#include <stdio.h>
#include<algorithm>
using namespace std; const int maxn = 100005; int f[maxn], val[maxn];//val记录区间奇偶值
int p[maxn];//p数组保存需要离散化的数据 struct node{int u, v, sum;}a[maxn];//保存输入 int Find(int x)
{
int k = f[x]; if(f[x] != x)
{
f[x] = Find(f[x]);
val[x] = (val[x]+val[k])%2;
} return f[x];
} int main()
{
int N; while(scanf("%d", &N) != EOF)
{
int i, M, k=0;
char s[10]; scanf("%d", &M); for(i=0; i<M; i++)
{
scanf("%d%d%s", &a[i].u, &a[i].v, s);
a[i].sum = (s[0] == 'e' ? 0 : 1);
//为防止不在两个不相邻的数离散化后相邻,在他们中间加一个数
p[k++] = a[i].u, p[k++] = a[i].u-1;
p[k++] = a[i].v, p[k++] = a[i].v-1;
}
p[k++] = N, p[k++] = N-1;
sort(p, p+k);
N = unique(p, p+k) - p;//去重复函数 for(i=0; i<N; i++)
f[i] = i, val[i] = 0; for(i=0; i<M; i++)
{
int u = lower_bound(p, p+N, a[i].u-1) - p;//二分查询
int v = lower_bound(p, p+N, a[i].v) - p; int ru = Find(u), rv = Find(v); if(ru == rv && (val[u]+a[i].sum)%2 != val[v])
break;
if(ru < rv)
{
f[rv] = ru;
val[rv] = (val[u]+a[i].sum-val[v]+2)%2;
}
else if(ru > rv)
{
f[ru] = rv;
val[ru] = (val[v]-a[i].sum-val[u]+2)%2;//注意别写错val里面的参数
}
} printf("%d\n", i);
} return 0;
}
H - Parity game-poj1733(需要离散化)的更多相关文章
- H - Parity game 并查集
Now and then you play the following game with your friend. Your friend writes down a sequence consis ...
- HDU 4417 Super Mario(主席树求区间内的区间查询+离散化)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- POJ1177 Picture —— 求矩形并的周长 线段树 + 扫描线 + 离散化
题目链接:https://vjudge.net/problem/POJ-1177 A number of rectangular posters, photographs and other pict ...
- HDU1542 Atlantis —— 求矩形面积并 线段树 + 扫描线 + 离散化
题目链接:https://vjudge.net/problem/HDU-1542 There are several ancient Greek texts that contain descript ...
- poj2482
(题外话:这题这是ACMer的福利啊……)我非常不擅长做矩形类的数据结构一般来说,二维的问题我们要转化为一维来考虑感觉一般的手法是对一维排序,并且线性扫描这一维,然后用各种数据结构维护另一维上的最优值 ...
- [题目] luogu P2061 [USACO07OPEN]城市的地平线City Horizon
算法 线段树 + 离散化 思路 对\((x,y,h)\)的左右端点\(x,y\)进行离散化,离散化前的原值记为\(val[i]\),对每个矩形按高度\(h\)从小到大排序. 设离散化后的端点有\(M\ ...
- 【BZOJ3524】Couriers(主席树)
题意:给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. n,m≤5000 ...
- POJ1733:Parity Game(离散化+带权并查集)
Parity Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12853 Accepted: 4957 题目链接 ...
- [POJ1733]Parity game(并查集 + 离散化)
传送门 题意:有一个长度已知的01串,给出[l,r]这个区间中的1是奇数个还是偶数个,给出一系列语句问前几个是正确的 思路:如果我们知道[1,2][3,4][5,6]区间的信息,我们可以求出[1,6] ...
随机推荐
- DATEDIFF interval=ms的用法
datediff(ms,@CurrDateTime,@Date)>0 当上面的日期超过24天,用上面的sql会有问题 要修改成如下: (CONVERT(VARCHAR,@CurrDateTime ...
- IOS开发网络篇之──ASIHTTPRequest详解
目录 目录 发起一个同步请求 创建一个异步请求 队列请求 请求队列上下文 ASINetworkQueues, 它的delegate提供更为丰富的功能 取消异步请求 安全的内存回收建议 向服务器端上传数 ...
- 由App的启动说起(转)
The two most important days in your life are the day you are born and the day you find out why. -- M ...
- VirtualBox 中的UBUNTU和java环境的配置以及各种常用说明
本来是要ubuntu下学习C++的,但是又懒的用高手们推荐的各种记事本级的操作,所以要用IDE.(我用IDE我自豪,人类的进化就是建立在工具的使用这个基础之上的.)我选用了oracle的netbean ...
- SGU 155.Cartesian Tree
时间限制:0.25s 空间限制:6M 题意: 给出n(n< 50000)个含双关键字(key,val)的节点,构造一颗树使该树,按key值是一颗二分查找树,按val值是一个小根堆. Soluti ...
- SGU 164.Airline(结论题)
时间限制:0.25s 空间限制:4M 题意: 在n(1<=n<=200)个点的无向完全图中,有m种不同的边.现在从中选择不超过(m+1)/2种边,使得任意两点可以通过不超过3条边互相到达. ...
- 用PHP添加购物商品
<?php session_start(); header ( "Content-type: text/html; charset=UTF-8" ); //设置文件编码格式 ...
- css杂项,清除浮动
在写HTML代码的时候,发现在Firefox等符合W3C标准的浏览器中,如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有clear,导致不能被撑开.看 ...
- postgresql 多实例运行
创建新的实例, (下面所用到的9.1版本,如果为其他版本,可以用版本号替换9.1) sudo /usr/bin/pg_createcluster -U postgres ...
- test about cnblog
there is nothing here. This is only a test about cnblog!