ZOJ 3789 Gears 并查集
2014-06-02 23:50
411 查看
题意:(copy的!)
有N个齿轮,三种操作
操作L x y:把齿轮x,y链接,若x,y已经属于某个齿轮组中,则这两组也会合并。
操作Q x y:询问x,y旋转方向是否相同(等价于齿轮x,y的相对距离的奇偶性)。
操作D x :拆下齿轮x,并且x所在的齿轮组不会断开
操作S x : 查询齿轮x所在的齿轮组有多少齿轮。
其实就是并查集了,维护父节点的同时,记录一下每个节点到根节点的距离,并且记录一下以x为根节点的集合有多少个元素。由于涉及到删除操作,删除的是根节点的话会导致信息丢失,所以在删除的时候直接新建一个节点,所以再加一个变量,表示节点x所对应的实际节点编号mp[x]。
不大会做,跟着学了一发。。
有N个齿轮,三种操作
操作L x y:把齿轮x,y链接,若x,y已经属于某个齿轮组中,则这两组也会合并。
操作Q x y:询问x,y旋转方向是否相同(等价于齿轮x,y的相对距离的奇偶性)。
操作D x :拆下齿轮x,并且x所在的齿轮组不会断开
操作S x : 查询齿轮x所在的齿轮组有多少齿轮。
其实就是并查集了,维护父节点的同时,记录一下每个节点到根节点的距离,并且记录一下以x为根节点的集合有多少个元素。由于涉及到删除操作,删除的是根节点的话会导致信息丢失,所以在删除的时候直接新建一个节点,所以再加一个变量,表示节点x所对应的实际节点编号mp[x]。
不大会做,跟着学了一发。。
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; #define N 600050 int fa , dis , siz , mp ; int find(int x){ if(x != fa[x]){ int father = find(fa[x]); dis[x] += dis[fa[x]]; return fa[x] = father; } return x; } void Union(int x, int y){ int fx = find(x), fy = find(y); if(fx == fy)return ; fa[fx] = fy; siz[fy] += siz[fx]; dis[x] = dis[y]+1; } int n,m; char s[20]; int main(){ int i,j,x,y,z; while(~scanf("%d %d",&n,&m)){ memset(dis, 0, sizeof dis); for(int i = 1; i <= n+m; i++){ fa[i] = mp[i] = i; siz[i] = 1; } int top = n+1; while(m--){ scanf("%s",s); if(s[0]=='L'){ scanf("%d %d",&x,&y); Union(mp[x],mp[y]); } else if(s[0]=='Q'){ scanf("%d %d",&x,&y); x = mp[x], y = mp[y]; if(find(x)!=find(y))puts("Unknown"); else if((dis[x]-dis[y])&1) puts("Different"); else puts("Same"); } else if(s[0]=='S'){ scanf("%d",&x); printf("%d\n",siz[find(mp[x])]); } else { scanf("%d",&x); y = mp[x]; siz[find(y)]--; mp[x] = top++; } } } return 0; }
相关文章推荐
- ZOJ 3789 Gears(并查集)
- ZOJ 3789 - Gears (并查集)
- ZOJ 3789 Gears(并查集)
- 【并查集】 ZOJ 3789 Gears
- ZOJ_3789_Gears(可统计集合元素个数和可删除结点的带权并查集)
- zoj 3789 并查集
- ZOJ 3789 Gears
- ZOJ 3789 Gears (并查集 合并+删除+离根节点的距离)
- ZOJ 3789 并查集
- ZOJ 3789 齿轮操作 带权并查集
- zoj 3789 并查集
- ZOJ 3811 Untrusted Patrol 并查集
- ZOJ 3656 Bit Magic(并查集)
- ZOJ 3321 Circle(并查集)
- ZOJ Problem Set - 3321 并查集
- ZOJ Problem Set - 3656 Bit Magic 并查集
- zoj 3261 - Connections in Galaxy War(并查集)
- zoj 3659 Conquer a New Region (经典并查集)
- 并查集 + Bfs 之 zoj 3811 Untrusted Patrol
- ZOJ-3261 Connections in Galaxy War 并查集 离线操作