【NOI2015】【程序自己主动分析】【并查集+离散化】
Description
在实现程序自己主动分析的过程中,经常须要判定一些约束条件能否被同一时候满足。
Input
输入文件的第1行包括1个正整数t,表示须要判定的问题个数。注意这些问题之间是相互独立的。
若e=1,则该约束条件为xi=xj。若e=0,则该约束条件为xi≠xj。
Output
输出文件包含t行。
Sample Input
2
1 2 1
1 2 0
2
1 2 1
2 1 1
Sample Output
YES
HINT
在第一个问题中,约束条件为:x1=x2,x1≠x2。这两个约束条件互相矛盾,因此不可被同一时候满足。
这两个约束条件是等价的,能够被同一时候满足。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct use{
int v1,v2,p1,p2,kind;
}a[1000001];
bool ff;
int fa[1000001],t,n,x,y,k,tt,c[1000001],tot;
int find(int x)
{
if (x!=fa[x]) fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
freopen("prog.in","r",stdin);
freopen("prog.out","w",stdout);
scanf("%d",&t);
while (t--)
{
memset(c,0,sizeof(c));
scanf("%d",&n);tt=0;ff=true;
for (int i=1;i<=2*n;i++) fa[i]=i;
for (int i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&k);
c[++tt]=x;c[++tt]=y;
a[i].v1=x;a[i].v2=y;a[i].kind=k;
}
sort(c+1,c+tt+1);
tot=unique(c+1,c+tt+1)-c-1;
for (int i=1;i<=n;i++)
{
int r1,r2;
a[i].p1=upper_bound(c+1,c+tot+1,a[i].v1)-c-1;
a[i].p2=upper_bound(c+1,c+tot+1,a[i].v2)-c-1;
r1=find(a[i].p1);r2=find(a[i].p2);
if (a[i].kind==1)
{
r1=find(a[i].p1);r2=find(a[i].p2);
if (r1!=r2) fa[r1]=r2;
}
}
for (int i=1;i<=n;i++)
{
int r1,r2;
if (a[i].kind==0)
{
r1=find(a[i].p1);r2=find(a[i].p2);
if (r1==r2){ff=false;break;}
}
}
if (ff) printf("YES\n");
else printf("NO\n");
}
}
【NOI2015】【程序自己主动分析】【并查集+离散化】的更多相关文章
- BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化
LUOGU 1955BZOJ 4195 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量 ...
- BZOJ 4195: [Noi2015]程序自动分析 [并查集 离散化 | 种类并查集WA]
题意: 给出若干相等和不等关系,判断是否可行 woc NOI考这么傻逼的题飞快打了一个种类并查集交上了然后爆零... 发现相等和不等看错了异或一下再叫woc90分 然后发现md$a \neq b, a ...
- NOI2015 洛谷P1955 程序自动分析(并查集+离散化)
这可能是我目前做过的最简单的一道noi题目了...... 先对e=1的处理,用并查集:再对e=0查询,如果这两个在同一集合中,则为""NO",最后都满足的话输出" ...
- BZOJ-4195 NOI2015Day1T1 程序自动分析 并查集+离散化
总的来说,这道题水的有点莫名奇妙,不过还好一次轻松A 4195: [Noi2015]程序自动分析 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 836 ...
- [UOJ#131][BZOJ4199][NOI2015]品酒大会 后缀数组 + 并查集
[UOJ#131][BZOJ4199][NOI2015]品酒大会 试题描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个 ...
- 【并查集+离散化】BZOJ4195- [Noi2015]程序自动分析
[题目大意] 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的 ...
- 【BZOJ4199】[Noi2015]品酒大会 后缀数组+并查集
[BZOJ4199][Noi2015]品酒大会 题面:http://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=2144 题解:听说能用SAM?SA默默 ...
- [NOI2015] 品酒大会 - 后缀数组,并查集,STL,启发式合并
[NOI2015] 品酒大会 Description 对于每一个 \(i \in [0,n)\) 求有多少对后缀满足 LCP 长度 \(\le i\) ,并求满足条件的两个后缀权值乘积的最大值. So ...
- BZOJ 4199: [Noi2015]品酒大会( 后缀数组 + 并查集 )
求出后缀数组后, 对height排序, 从大到小来处理(r相似必定是0~r-1相似), 并查集维护. 复杂度O(NlogN + Nalpha(N)) ------------------------- ...
随机推荐
- 将一个二叉树左右翻转(Java 版)
public class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; ...
- reportlab包使用指南
reportlab.canvas有这六个主要参数 1.pagesize:设置纸张大小 #from reportlab.lib.pagesizes import letter, A4 导入常见的 ...
- LeetCode OJ--Combinations *
https://oj.leetcode.com/problems/combinations/ 给一个集合,求个数为k的所有子集 递归调用,深搜 class Solution { public: vec ...
- 一个关于集合的问题,为什么添加进List集合中的元素被莫名其妙的改变了
以前自己理解的不够深刻,特此记录一下提醒自己,如果正好也帮到了你,我会很开心.相信只有自己正好遇到这个问题,才觉得哦,原来这样.自己小白,大神莫喷 为什么添加进List集合中的元素被莫名其妙的改变了? ...
- Codeforces Round #343 (Div. 2) A. Far Relative’s Birthday Cake【暴力/组合数】
A. Far Relative’s Birthday Cake time limit per test 1 second memory limit per test 256 megabytes inp ...
- redis入门与集群部署
redis入门 redis入门级教程非常多,如http://www.runoob.com/redis/redis-backup.html,作为入门其实已经十分详细了,主要学习内容有如下几个方面吧 1. ...
- GRDB自定义的纯函数
GRDB自定义的纯函数 在GRDB中,用户可以自定义SQlite函数.这样,在SQL语句中,可以直接调用这些函数.但是在定义的时候,用户需要指定函数的pure属性,表示该函数是否为纯函数.纯函数是 ...
- Oracle并发控制、事务管理学习笔记
(a)基本概念 锁的2种最基本.最简单的类型:排他锁(eXclusive lock,即X锁).共享锁(Share lock,即S锁). 不同级别的锁定协议及其作用: 申请的锁 及其作用 锁定协议 修改 ...
- Zlib编译
转自原文 编译和使用zlib 由于要编译Cesium Terrain Build,其中不仅需要gdal,还用到了zlib,所以此时不得不总结一下Zlib的编译之道了. 在windows下用到zlib库 ...
- struts_hibernate登陆范例
开发工具:MyEclipse 6.0 ,Tomcat 5.5 ,JDK 1.5 ,MySQL 5.0 :开发准备:下载Struts 2.0和Hibernate 3.2,大家可Struts和Hiber ...