51nod 1515 明辨是非[并查集][set]
来源:互联网 发布:淘宝推广网站大全 编辑:程序博客网 时间:2024/05/17 02:42
对于每一个数分别维护并查集和一个集合
并查集用于判断相等关系
集合用于判断不等关系:每个数的集合中原来为空,如果两个数
若
若
#include<cstdio>#include<algorithm>#include<set>#include<map>#define N 200000using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline void read(int &x){ char c=nc(),b=1; for(;!(c>='0'&&c<='9');c=nc()) if(c=='-') b=-1; for(x=0;c>='0'&&c<='9';x=x*10+c-'0',c=nc()); x*=b;}int n,cnt=1,fa[N+5];set<int>s[N+5];map<int,int>m;inline int Pos(int x){return m[x]?m[x]:(m[x]=++cnt);}int getf(int x){return fa[x]==x?x:fa[x]=getf(fa[x]);}int main(){ read(n); for(int i=1;i<=n*2;++i) fa[i]=i; int x,y,opt; while(n--) { read(x),read(y),read(opt); x=Pos(x),y=Pos(y); int fx=getf(x),fy=getf(y); if(opt==1) { if(s[fx].count(fy)) puts("NO"); else if(fx!=fy) { if(s[fx].size()>s[fy].size()) swap(fx,fy); fa[fx]=fy; for(set<int>::iterator pos=s[fx].begin();pos!=s[fx].end();++pos) s[*pos].erase(fx),s[*pos].insert(fy),s[fy].insert(*pos); puts("YES"); } else puts("YES"); } else { if(fx==fy) puts("NO"); else { s[fx].insert(fy); s[fy].insert(fx); puts("YES"); } } } return 0;}
阅读全文
0 0
- 51nod 1515 明辨是非[并查集][set]
- 51nod 1515 明辨是非(合并并查集)
- 51nod 1515:明辨是非 并查集合并
- 51nod 1515 明辨是非 && 2017百度之星初赛第一场第二题(并查集+启发式合并)
- 【51nod 1515】 明辨是非
- 【51Nod 1515】明辨是非
- 51Nod-1515-明辨是非
- 51nod 1515 明辨是非[Waiting]
- 51nod 1204:Parity 并查集
- 51nod 1191-贪心+并查集
- 51nod 1525 并查集
- 51nod 1416 两点【并查集】
- 51nod 1204 Parity[并查集]
- 【并查集】集合 set
- zoj3261(并查集+set)
- Disjoint-Set并查集
- 51Nod 1163 最高的奖励 并查集&贪心
- 51nod 1456【强连通,缩点,并查集】
- dinaji
- wow32注入64位进程
- linux下的git本地仓库
- 软件工程微信平台作业总结
- MYSQL 的自我封装
- 51nod 1515 明辨是非[并查集][set]
- 图论——图的遍历
- drawerlayout侧滑
- POJ
- android开源框架简介
- Material的Tilling跟Offset
- 通知框(违规字符)(angularjs)
- Java数据结构学习笔记
- Linux下IP地址配置方法