一、题面

POJ1733

二、分析

该题与之前做过的带权并查集的唯一区别就是数组开不下。所以需要用离散化的思想,只取那些有用的点来解决该问题。

离散化其实就是把这些所有用到的点收集后,去重,再排一下序,然后用新数组它们的下标代表他们。

接下来数组能开下了,就用带权并查集的做法去做,这里权值可以直接用bool值,然后随便写几个发现是异或关系。

但需要注意,这里还是需要将输入的坐标往左移一下,直接不去考虑同一个点的情况。

三、AC代码

 #include <cstdio>
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = 1e4+;
int par[MAXN], A[MAXN], B[MAXN];
int Temp[MAXN], Cnt;
bool Rank[MAXN], Odd[MAXN]; void Init()
{
memset(par, -, sizeof(par));
memset(Rank, , sizeof(Rank));
} int Pos(int x)
{
int left = , right = Cnt-, mid;
while(left <= right)
{
mid = (left+right)>>;
if(Temp[mid] == x)
return mid;
else if(Temp[mid] > x)
right = mid-;
else
left = mid+;
}
return -;
} int Find(int x)
{
if(par[x] == -) return x;
int t = Find(par[x]);
Rank[x] = Rank[x]^Rank[par[x]];
return par[x] = t;
} bool Union(int x, int y, bool flag)
{
int fx = Find(x);
int fy = Find(y);
if(fx == fy)
{
return (flag^Rank[y]) == Rank[x];
}
else
{
par[fx] = fy;
Rank[fx] = flag^Rank[y]^Rank[x];
return true;
}
} int main()
{
//freopen("input.txt", "r", stdin);
int N, T, ans;
char op[];
while(scanf("%d", &N)!=EOF)
{
Cnt = ;
Init();
scanf("%d", &T);
for(int i = ; i < T; i++)
{
scanf("%d %d %s", &A[i], &B[i], op);
A[i]--; //***
Temp[Cnt++] = A[i];
Temp[Cnt++] = B[i];
Odd[i] = (op[] == 'o');
}
sort(Temp, Temp + Cnt);
Cnt = unique(Temp, Temp+Cnt) - Temp;
int x, y;
ans = T; for(int i = ; i < T; i++)
{
x = Pos(A[i]);
y = Pos(B[i]);
if(!Union(x, y, Odd[i]))
{
ans = i;
break;
}
}
printf("%d\n", ans);
}
return ;
}

POJ_1733 Parity game 【并查集+离散化】的更多相关文章

  1. POJ - 1733 Parity game 种类并查集+离散化

    思路:d(i, j)表示区间(i, j]的1的个数的奇偶性.输入最多共有5000*2个点,需要离散化处理一下.剩下的就是并查集判冲突. AC代码 #include <cstdio> #in ...

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

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

  3. [POJ1733]Parity game(并查集 + 离散化)

    传送门 题意:有一个长度已知的01串,给出[l,r]这个区间中的1是奇数个还是偶数个,给出一系列语句问前几个是正确的 思路:如果我们知道[1,2][3,4][5,6]区间的信息,我们可以求出[1,6] ...

  4. poj1733(种类并查集+离散化)

    题目链接: http://poj.org/problem?id=1733 题意: 输入n表示有一个长度为n的0,1字符串, m表示接下来有m行输入, 接下来的m行输入中x, y, even表示第x到第 ...

  5. BZOJ-4195 NOI2015Day1T1 程序自动分析 并查集+离散化

    总的来说,这道题水的有点莫名奇妙,不过还好一次轻松A 4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 836 ...

  6. HDU 1856 More is better(并查集+离散化)

    题目地址:HDU 1856 水题.因为标号范围太大,而数据数仅仅有10w,所以要先进行离散化.然后就是裸的并查集了. 代码例如以下: #include <iostream> #includ ...

  7. BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化

    LUOGU 1955BZOJ 4195 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量 ...

  8. bzoj4195(并查集+离散化)

    题目大意:给出n个变量互相的相等或不等关系,求这些关系是否矛盾 思路:把相等的变量加入并查集,不等的查询是否合法 eg:数据很大,离散化(然而我用的是map) #include<stdio.h& ...

  9. poj1733(并查集+离散化)

    题目大意:有一个长度为n的0,1字符串, 给m条信息,每条信息表示第x到第y个字符中间1的个数为偶数个或奇数个, 若这些信息中第k+1是第一次与前面的话矛盾, 输出k; 思路:x, y之间1的个数为偶 ...

随机推荐

  1. 代码查看import的类是出自哪个jar包的方法(转)

    import java.security.ProtectionDomain; import java.security.CodeSource; public static void main(Stri ...

  2. 【转】LVS/Nginx如何处理session问题

    原文地址:http://network.51cto.com/art/201005/200279.htm 通过设置persistence的值,使session会话保持. [51CTO.com独家特稿]业 ...

  3. numpy ndarray 返回 index 问题

    经常遇到需要返回满足条件的index. python中没有which函数,但有列表推导式, 可以实现类似功能 y= np.array([3,2,5,20]) yOut[131]: array([ 3, ...

  4. React项目中的registerServiceWorker的作用

    在公司的React前端项目中,发现有一个registerServiceWorker.js文件, 很久都没弄明白这个文件是干什么用的,查询了一些资料后,了解了一些 service worker是在后台运 ...

  5. php抓取网页中的内容

    以下就是几种常用的用php抓取网页中的内容的方法.1.file_get_contentsPHP代码代码如下:>>>>>>>>>>>&g ...

  6. (转)EASYUI+MVC4通用权限管理平台

    原文地址:http://www.cnblogs.com/hn731/archive/2013/07/15/3190947.html 通用权限案例平台在经过几年的实际项目使用,并取得了不错的用户好评.在 ...

  7. (转)每位设计师都应该拥有的50个CSS代码片段

    原文地址:http://www.cnblogs.com/fengyuqing/archive/2013/06/15/css_50.html 面对每年如此多的 新趋势 ,保持行业的领先是个很困难问题. ...

  8. Git代码冲突常见解决方法

    在发布这个配置文件的时候,会发生代码冲突: error: Your local changes to the following files would be overwritten by merge ...

  9. 解决chrome浏览器无法得到window.showModalDialog返回值的问题

    父页面处理: function ProductList() {   var TypeID = window.document.getElementById("Type").valu ...

  10. Android中如何下载文件并显示下载进度

    原文地址:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1125/2057.html 这里主要讨论三种方式:AsyncTask.Serv ...