题目大意:给出n个变量互相的相等或不等关系,求这些关系是否矛盾

思路:把相等的变量加入并查集,不等的查询是否合法

eg:数据很大,离散化(然而我用的是map)

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<map>
using namespace std;
int fa[],n,sum[],tot,T;
map<int,int> old,tong;
struct node
{
int x,y,c;
}a[];
template<class T>void read(T &x)
{
x=;char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ch^);ch=getchar();}
}
int find(int x)
{
int p=x,q;
while(x!=fa[x])
x=fa[x];
while(p!=x)
{
q=fa[p];
fa[p]=x;
p=q;
}
return x;
}
int main()
{
read(T);
while(T--)
{
old.clear();tong.clear();tot=;bool flag=;
read(n);
for(int i=;i<=n;i++)
{
read(a[i].x);read(a[i].y);read(a[i].c);
if(tong[a[i].x]==)
{
tong[a[i].x]=;
sum[++tot]=a[i].x;
}
if(tong[a[i].y]==)
{
tong[a[i].y]=;
sum[++tot]=a[i].y;
}
}
sort(sum+,sum++tot);
for(int i=;i<=tot;i++) old[sum[i]]=i;
for(int i=;i<=n;i++)
{
a[i].x=old[a[i].x];
a[i].y=old[a[i].y];
}
for(int i=;i<=tot;i++) fa[i]=i;
for(int i=;i<=n;i++)
{
int p=find(a[i].x),q=find(a[i].y);
if(a[i].c==&&p!=q) fa[p]=q;
if(a[i].c!=&&p==q){flag=;break;}
}
if(flag==){printf("NO\n");continue;}
for(int i=;i<=n;i++)
{
int p=find(a[i].x),q=find(a[i].y);
if(a[i].c==&&p!=q){flag=;break;}
if(a[i].c==&&p==q){flag=;break;}
}
if(flag==)printf("NO\n");
else printf("YES\n");
}
return ;
}

bzoj4195(并查集+离散化)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. POJ_1733 Parity game 【并查集+离散化】

    一.题面 POJ1733 二.分析 该题与之前做过的带权并查集的唯一区别就是数组开不下.所以需要用离散化的思想,只取那些有用的点来解决该问题. 离散化其实就是把这些所有用到的点收集后,去重,再排一下序 ...

随机推荐

  1. jq 日期区间处理

    <html lang="en"><head> <meta charset="UTF-8"> <title>Tit ...

  2. SpringBoot------自定义Logback日志

    帮助文档: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-featur ...

  3. Window应急响应(五):ARP病毒

    0x00 前言 ARP病毒并不是某一种病毒的名称,而是对利用arp协议的漏洞进行传播的一类病毒的总称,目前在局域网中较为常见.发作的时候会向全网发送伪造的ARP数据包,严重干扰全网的正常运行,其危害甚 ...

  4. Android Studio 3依赖配置

    新配置 对应的过时配置 描述 implementation compile module编译时可用,module的使用者运行时可用,对于大量使用library的项目,可以显著提高编译时间,因为它可以减 ...

  5. 语法的二义性和token的超前扫描

    语法的二义性 JavaCC不能分析所有EBNF描述的语法,因为EBNF描述的语法本质上具有二义性的情况.C语言中if语句用JavaCC的EBNF可以是如下描述: "if" &quo ...

  6. 前端编程tips

    1.ts less 网上搜视频教程,不用太复杂的,短短几分钟视频基本就对其入门了,比自己搜官网学习更方便. 常用的ts技术:let name:string="";  let obj ...

  7. poj 2826

    太自闭了...明明很水的说... 有三种为0的情况.一种是有水平,一种是没交点. 第三种有点难想啊.就是下面那个板子被上面的挡住了,,雨水进不去... 关键是我翻了翻discuss找到了这种数据,,但 ...

  8. Java 中数据库连接池的比较

    见 原文,现阶段建议使用 https://github.com/brettwooldridge/HikariCP

  9. c++求最小公倍数和最小公约数

    方法一:辗转相除法(欧几里得 Euclidean) 用“较大数”除以“较小数”,再用较小数除以第一余数,再用第一余数除以第二余数: 反复直到余数为零为止. #include<iostream&g ...

  10. libvirt虚拟库

    转载自:https://www.ibm.com/developerworks/cn/linux/l-libvirt/index.html Libvirt 虚拟化库剖析   讲到向外扩展计算(比如云计算 ...