hdu 2120 Ice_cream's world I (简单并查集 + 判环)
2015-08-12 16:18
573 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2120
【题目大意】
富裕的女王 要给ACMER分地,女王的土地中有很多瞭望塔,女王命令下人在瞭望塔(watchtower) 与瞭望塔之间建立笔直的围墙,被围墙圈起来的土地可以用来奖励ACMER,但是女王智商捉急,不知道最多能奖励多少ACMER,请你来帮忙。
通过并查集的Union操作就可以实现瞭望塔之间的联通,如果两个瞭望塔所在根节点相同,说明有环,非常简单的问题
【源代码】
【题目大意】
富裕的女王 要给ACMER分地,女王的土地中有很多瞭望塔,女王命令下人在瞭望塔(watchtower) 与瞭望塔之间建立笔直的围墙,被围墙圈起来的土地可以用来奖励ACMER,但是女王智商捉急,不知道最多能奖励多少ACMER,请你来帮忙。
通过并查集的Union操作就可以实现瞭望塔之间的联通,如果两个瞭望塔所在根节点相同,说明有环,非常简单的问题
【源代码】
#include<cstdio> using namespace std; const int maxn = 1010; int father[maxn]; void init(){ for(int i=0;i<maxn;i++) father[i]=i; } int Find(int x){ int rt = x; while(rt!=father[rt]) rt=father[rt]; while(x!=rt){ int tmp = father[x]; father[x] = rt; x=tmp; } return rt; } int Union(int x, int y){ int xr = Find(x); int yr = Find(y); if(xr == yr) return 1; //根节点相同, 说明成环 father[xr] = yr; return 0; } int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ init(); int a,b; int ans= 0; for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); ans+=Union(a,b); } printf("%d\n",ans); } return 0; }
相关文章推荐
- SQLite集成与用法
- [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)
- hdu 2120 Ice_cream's world I (简单并查集 + 判环)
- poj3318--Matrix Multiplication(随机算法)
- 详细解读JavaScript的跨浏览器事件处理
- 20150812-IAR环境报Fatal Error[Cp001]: Copy protection check, No valid license found for this product
- 几个input必须都填写否则button灰化
- shell 函数
- [独孤九剑]持续集成实践(二)– MSBuild语法入门
- Java后台传前台json数组
- destoon的如何显示tag生成的sql语句
- 用浏览器打开本地html 直接到首页 的解决方法
- 常用的正则表达式集锦
- JMeter教程
- Java多线程系列--“JUC锁”07之 LockSupport
- 【UI视觉】Android material Ripple 水波 点击效果
- http状态码详解
- hdu 5375 Gray code dp
- [独孤九剑]持续集成实践(一)- 引子
- 动态规划解题的一般思路