[NOI2002]银河英雄传说(并查集)
2015-06-29 17:14
218 查看
【题解】
建立并查集,并维护每个结点到root的距离、每个连通块中结点的个数sum
"M i j"即:将father(i)到root的距离改为 sum[father(y)],将sum[father(y)]增加 sum[father(x)]
【代码】
建立并查集,并维护每个结点到root的距离、每个连通块中结点的个数sum
"M i j"即:将father(i)到root的距离改为 sum[father(y)],将sum[father(y)]增加 sum[father(x)]
【代码】
#include<stdio.h> #include<stdlib.h> #include<math.h> int fa[30005],dis[30005]={0},sum[30005]; int father(int x) { int t; if(fa[x]!=x) { t=father(fa[x]); dis[x]+=dis[fa[x]]; fa[x]=t; } return fa[x]; } int main() { char opt; int T,x,y,fx,fy,i; scanf("%d",&T); for(i=1;i<=30000;i++) { fa[i]=i; sum[i]=1; } for(;T>0;T--) { scanf("\n%c %d%d",&opt,&x,&y); fx=father(x); fy=father(y); if(opt=='M') { dis[fx]=sum[fy]; sum[fy]+=sum[fx]; fa[fx]=fy; } else { if(fx!=fy) printf("-1\n"); else printf("%d\n",abs(dis[y]-dis[x])-1); } } return 0; }
相关文章推荐
- 一个简单的http请求
- html5的本地存储localStorage和sessionStorage
- linux 使用 ionice 限制 Xen 虚拟机磁盘 IO
- Pyqt 获取打包二进制文件中的资源
- Python 迭代器 & __iter__方法
- virtaulbox视图模式常用切换
- Python 中xrange和range区别
- Python yield 使用浅析
- net start mysql 发生系统错误2
- SQL Server 联表字段合并查询
- C语言的作用域规则
- Pyqt adb 获取Android手机屏幕
- 集合的模拟实现(函数模板)
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- Spring的IOC容器—依赖注入
- #ifdef和#if defined的差别以及复杂判断
- devexpress表格控件gridcontrol图片列,按钮列,时间列等特殊列的实现
- Java 装箱和拆箱
- 类的sizeof
- Java学习-021-Properties 获取配置项对应的值