并查集
2016-07-23 09:59
232 查看
#include <iostream> #include <string.h> #include <algorithm> #include <stdio.h> #include <math.h> #include <queue> #define MAXN 100010 #define inf 0x3f3f3f3f using namespace std; int uset[MAXN]; int deep[MAXN];//深度 void init(){ for(int i = 0; i < MAXN; ++i){ uset[i] = i; } memset(deep,0,sizeof(deep)); } int found(int x){ return x==uset[x]?x:uset[x] = found(uset[x]); } int main() { int n,m; int x,y; while(~scanf("%d",&n)){ init(); scanf("%d",&m); while(m--){ scanf("%d%d",&x,&y); int xx = found(x); int yy = found(y); if(xx != yy){ uset[xx] = yy; /*加个深度优化 if(deep[xx] > deep[yy]){ uset[y] = x; } else{ uset[x] = y; if(deep[xx] == deep[yy]){ ++deep[yy]; } } */ } } for(int i = 1; i <= n; ++i){ x = found(i); cout<<x<<endl; } } return 0; }
相关文章推荐
- mysql 性能容量评估
- 使用 Tmux 强化终端功能
- VB程序学习代码记录20160723
- Spring Cache 介绍
- Java之内部类语法详解(附源码)
- HDU5692(dfs序+线段树)
- 【转载】信号与信号量的区别
- golang中strconv.ParseInt函数用法示例
- 不要做一个浮躁的程序员
- 计算机的组成系统
- js事件驱动机制 浏览器兼容处理方法
- oradebug
- 如何解决有限无限同时上网的问题
- Android 嵌套Fragment的使用实例代码
- SQL:执行计划的几种方法
- spring+mybatis 多数据源切换
- Android startActivityForResult函数
- 排序动图好理解
- sql_monitor
- [置顶] 【Android异常处理】异常、警告处理合集(长期更新)