[并查集]51 Nod 1525——重组公司
来源:互联网 发布:淘宝ipad版 编辑:程序博客网 时间:2024/04/29 22:56
题目梗概
普通的并查集问题?
多了一种区间合并的操作。
解题思路
还是很水。
维护每个点前面最近的没合并的节点是谁就可以了。
#include<cstdio>using namespace std;char nc(){ static char buf[100000],*l=buf,*r=buf; if (l==r) r=(l=buf)+fread(buf,1,100000,stdin); if (l==r) return EOF;return *l++;}inline int _read(){ int num=0;char ch=nc(); while(ch<'0'||ch>'9') ch=nc(); while(ch>='0'&&ch<='9') num=num*10+ch-48,ch=nc(); return num;}const int maxn=200005;int n,m;int f[maxn],lst[maxn];inline int get(int x){ if (f[x]==x) return x; f[x]=get(f[x]); return f[x];}inline int get1(int x){ if (lst[x]==x) return x; lst[x]=get1(lst[x]); return lst[x];}int main(){ freopen("exam.in","r",stdin); freopen("exam.out","w",stdout); n=_read();m=_read(); for (int i=1;i<=n;i++) f[i]=i,lst[i]=i; for (int i=1;i<=m;i++){ int d=_read(),x=_read(),y=_read(); if (d==1) f[get(x)]=get(y); if (d==2) for (int j=get1(y);j>x;j=get1(j)) lst[j]=get1(j-1),f[get(j-1)]=get(j); if (d==3) if (get(x)==get(y)) putchar('Y'),putchar('E'),putchar('S'),putchar('\n');else putchar('N'),putchar('O'),putchar('\n'); } return 0;}
阅读全文
0 0
- [并查集]51 Nod 1525——重组公司
- 51NOD 1525 重组公司 并查集
- 51Nod-1525-重组公司
- 51nod 1525 重组公司
- 51NOD1525重组公司(并差集)
- 51nod 1525 并查集
- 51nod 1204:Parity 并查集
- 51nod 1191-贪心+并查集
- 51nod 1416 两点【并查集】
- 51nod 1204 Parity[并查集]
- 1525 重组公司
- 51NOD1525 重组公司
- 【51Nod1525】重组公司
- 51Nod 1163 最高的奖励 并查集&贪心
- 51nod 1456【强连通,缩点,并查集】
- 51 NOD 1521 一维战舰(并查集)
- 51nod 1366 贫富差距【并查集+Floyd】
- 51nod 1535 深海探险【思维+并查集】
- 学习笔记13
- SVN之版本管理系统安装及svnadmin编码问题-yellowcong
- Could not autowire field
- Pulltorefresh的布局
- JavaScript对象创建与继承总结
- [并查集]51 Nod 1525——重组公司
- [jacob]no jacob in java.library.path错误的解决
- struts2中ajax的使用
- java操作elasticsearch 5.6.0查询、插入
- sprin mvc 处理购物车问题
- SurfaceView 的使用
- 洛谷 P1311 选择客栈
- 洛谷 P2656 采蘑菇
- 2017NOIP模拟赛 D【思维】作诗(分块)