bzoj4195(并查集+离散化)
题目大意:给出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(并查集+离散化)的更多相关文章
- BZOJ-4195 NOI2015Day1T1 程序自动分析 并查集+离散化
总的来说,这道题水的有点莫名奇妙,不过还好一次轻松A 4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 836 ...
- poj1733(种类并查集+离散化)
题目链接: http://poj.org/problem?id=1733 题意: 输入n表示有一个长度为n的0,1字符串, m表示接下来有m行输入, 接下来的m行输入中x, y, even表示第x到第 ...
- HDU 1856 More is better(并查集+离散化)
题目地址:HDU 1856 水题.因为标号范围太大,而数据数仅仅有10w,所以要先进行离散化.然后就是裸的并查集了. 代码例如以下: #include <iostream> #includ ...
- POJ - 1733 Parity game 种类并查集+离散化
思路:d(i, j)表示区间(i, j]的1的个数的奇偶性.输入最多共有5000*2个点,需要离散化处理一下.剩下的就是并查集判冲突. AC代码 #include <cstdio> #in ...
- BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化
LUOGU 1955BZOJ 4195 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量 ...
- poj 1733 Parity game(带权并查集+离散化)
题目链接:http://poj.org/problem?id=1733 题目大意:有一个很长很长含有01的字符串,长度可达1000000000,首先告诉你字符串的长度n,再给一个m,表示给你m条信息, ...
- poj1733(并查集+离散化)
题目大意:有一个长度为n的0,1字符串, 给m条信息,每条信息表示第x到第y个字符中间1的个数为偶数个或奇数个, 若这些信息中第k+1是第一次与前面的话矛盾, 输出k; 思路:x, y之间1的个数为偶 ...
- poj1733(带权并查集+离散化)
题目链接:http://poj.org/problem?id=1733 题意:给定由0.1组成的数串长度n,询问次数m,每次询问给出a,b,s,表示区间[a,b]内1的数量为s(odd-奇数或even ...
- POJ_1733 Parity game 【并查集+离散化】
一.题面 POJ1733 二.分析 该题与之前做过的带权并查集的唯一区别就是数组开不下.所以需要用离散化的思想,只取那些有用的点来解决该问题. 离散化其实就是把这些所有用到的点收集后,去重,再排一下序 ...
随机推荐
- Linux使用命令修改默认启动为图形或字符界面
因为要在Linux系统上装NVIDIA显卡驱动,默认重启必须是字符界面,因此把这块所需命令记录下来. 1,先查看当前系统默认启动的界面 systemctl get-default 2,修改默认启动界面 ...
- Tcp Udp发送包的大小限制问题
以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的. 这个1500字节被称为链路层的MTU(最大传输单元). 但这并不是指链路层的长度被限制在 ...
- Android手机用wifi连接adb调试的方法
https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android开发肯定要连接pc的adb进行调试,传统的方法是用usb与pc进行连接,操作简单即插即用,缺点 ...
- git备忘 & ProGit笔记
git configgit config xxxxx xxxx可以是 --global(使用的是~/.gitconfig) --system(据说在linux下面使用的是/etc/gitcon ...
- java数值比较
import org.junit.Test; public class NumberCompare { /** * 数值比较,以Float为例 */ @Test public void testNam ...
- Window 产品密钥
2019.4.2 测试可用 window2003 DF74D-TWR86-D3F4V-M8D8J-WTT7M
- linux telnet检测与某个端口是否开通
转自:http://blog.51cto.com/meiling/1982402 一:telnet此法常被用来检测是个远端端口是否通畅. 测试域名: # telnet baidu.com 80 Try ...
- 解决ubuntu开机进入grub界面的问题
开机显示GRUB界面显示如下字样,几秒后自动进入登录界面 *Ubuntu Advanced options for Ubuntu .... 解决方案: 1.编辑grub文件 sudo vim /etc ...
- centos 7 mysql启动失败--学会看错误日志
一.现象 mysql客户端连接时: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql ...
- Golang, 以 9 个简短代码片段,弄懂 defer 的使用特点
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...