一、题面

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. 基于 EntityFramework 的数据库主从读写分离架构 - 目录

    基于 EntityFramework 的数据库主从读写分离架构       回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目 ...

  2. RocketMq2

  3. 【未整理】web.xml加载顺序.RP

    一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Ser ...

  4. Robot Framework - 常用断言讲解

    RobotFramework带有丰富的系统关键,使用时无需导入,直接使用,为写自动化用例带来了极大的方便:不能停留在知道或者是会得程度,只有熟练使用各关键字,才能提升自动化用例的写作效率. 下面将逐个 ...

  5. GCC 4.7相对4.6.x的改进点

    原文:http://www.iteye.com/news/24628针对C的功能改进: 支持ISO C11标准中的更多特性.除了之前的-std=c1x和-std=gnu1x选项外,GCC现在还支持-s ...

  6. Java集合类总结 (一)

    集合类中的基本接口 集合类中最基础的接口是Collection: public interface Collection<E> { boolean add(E element); Iter ...

  7. C# 文本输入限制类型,datagridview单元格输入验证

    1.只能输入double类型 private void textBoxX6_KeyPress(object sender, KeyPressEventArgs e) { { //数字0~9所对应的ke ...

  8. select2的搜索框不能输入搜索内容

    按照select2官网配置完后,搜索框弹出后无法输入内容,究竟怎么回事,于是在其他页面尝试了select2,发现可以啊,为什么在这个地方不可以,终于找到了造成这个问题的不同之处:select2在模态对 ...

  9. .Net Core .Net Core V1.0 创建MVC项目

    .Net Core V1.0 创建MVC项目 创建MVC项目有两种方式: 一.创建Web项目:(有太多没用的东西要去删太麻烦) 2.项目目录结构: 此种方法要注意的是,会创建好多个json文件,下面就 ...

  10. ubuntu14.04,安装docker(源代码管理工具)

    一,安装docker: 1,安装curl:在shell中执行:sudo apt-get install curl 2,shell中执行:curl -sSL https://get.daocloud.i ...