题目大意:给出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. C++ 非常量引用无效

    /* 非常量引用无效 */ #include <iostream> using namespace std; /* C++标准的规定:非常量的引用不能指向临时对象: 为了防止给常量或临时变 ...

  2. apache2.4 文件浏览服务器页面配置

    footer <style> table{ border:1px solid #ccc; border-radius:6px; border-collapse:collapse; box- ...

  3. mac更改launchpad图标大小

    设置每列显示的图标数目为8 defaults write com.apple.dock springboard-columns -int 8设置每行显示的图标数目为7 defaults write c ...

  4. <转>从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    转自 http://blog.csdn.net/likika2012/article/details/39619687 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经 ...

  5. UIWebView使用app内自定义字体

    最近,做了个小需求.因为app是使用的自定义字体,所以产品想让h5的字体跟app的字体一致,减少脱离感.而一般来说,app内的h5页面,都是显示系统的默认字体.要想使用自定义字体,一般的做法是在h5里 ...

  6. weapp-mobx

    // weapp-mobx.js const l = console.log; import { autorun } from "./mobx.umd.min"; function ...

  7. maven deploy 上传jar包到私有仓库

    mvn \ deploy:deploy-file \ -DgroupId=com.weibo.datasys \ -DartifactId=data-flow \ -Dversion=2.0.0 \ ...

  8. 点击app分享链接,js判断手机是否安装某款app,有就尝试打开,没有就下载

    html: <h1 class="downlink"> 前往 </h1> js: document.addEventListener('DOMContent ...

  9. css的小知识

    ---恢复内容开始--- 1.当你发现在制作页面时出现滚动条就需要一个去除滚动条的属性 overflow:hidden:           overflow-x:hidden:水平超出隐藏 2.  ...

  10. easyui equals验证代码

    在使用easyui textbox进行相等验证时却没有效果,经查询原来官方代码中没有提供equals验证的方法,搜了一个加上去就OK了: // extend the 'equals' rule $.e ...