-
B - Restructuring Company
- CodeForces - 566D
- 题意:
- 三种操作 1.查询2.单点合并.3.区间合并.
- 难点在于区间合并
- 建立一个数组存储大于他的第一个非同一集合的元素
- 合并 i与i-1进行合并.减少重复,
-
#include<iostream> #include<stdio.h> using namespace std; #define maxn 250000 int n,q,fa[maxn],order,x,y,park[maxn]; int fond(int x) { return x==fa[x]?x:fa[x]=fond(fa[x]); } int main() { ios::sync_with_stdio(false); scanf("%d%d",&n,&q); for(int i=1; i<=n; i++) { fa[i]=i; park[i]=i+1; } while(q--) { scanf("%d%d%d",&order,&x,&y); if(order==3) { if(fond(x)!=fond(y)) printf("NO\n"); else printf("YES\n"); } else if(order==2) { for(int i=x+1;i<=y;) { fa[fond(i)]=fond(i-1); int temp=park[i]; park[i]=y+1; i=temp; } } else if(order==1) fa[fond(x)]=fond(y); } return 0; }
Restructuring Company-区间合并并查集
最新推荐文章于 2020-06-01 16:31:24 发布