博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4619 Warm up 2(并查集)
阅读量:6080 次
发布时间:2019-06-20

本文共 1162 字,大约阅读时间需要 3 分钟。

把相互覆盖的骨牌放入一个集合中,如果一个集合有cnt 个元素  那么这个集合所在区域最多只能存在 (cnt +1)/2 个元素。

 

#include 
#include
using namespace std;int father[2005];int cnt[2005];int vis[105][105];void init(int n){ int i; for(i=1;i<=n;i++) { father[i]=i; cnt[i]=0; }}int find(int x){ while(father[x]!=x) x=father[x]; return x;}void merge(int x,int y){ int xx=find(x); int yy=find(y); if(xx==yy)return; father[xx]=yy;}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { if(!n && !m)break; memset(vis,0,sizeof(vis)); init(n+m); for(int i=1;i<=n;i++) { int x,y; scanf("%d%d",&x,&y); vis[y][x]=vis[y][x+1]=i; } for(int i=n+1;i<=n+m;i++) { int x,y; scanf("%d%d",&x,&y); if(vis[y][x]!=0)merge(i,vis[y][x]); if(vis[y+1][x]!=0)merge(i,vis[y+1][x]); } for(int i=1;i<=m+n;i++) { int rt=find(i); cnt[rt]++; } int ans=0; for(int i=1;i<=m+n;i++) { ans+=((cnt[i]+1)/2); } printf("%d\n",ans); } return 0;}

 

 

转载地址:http://fnhgx.baihongyu.com/

你可能感兴趣的文章
低版本Samba无法挂载
查看>>
Telegraf+Influxdb+Grafana构建监控平台
查看>>
使用excel 展现数据库内容
查看>>
C#方法拓展
查看>>
MySql.Data.dll的版本
查看>>
Linux系统磁盘管理
查看>>
hdu 2191 (多重背包+二进制优化)
查看>>
home.php
查看>>
neo4j---删除关系和节点
查看>>
redis分布式锁redisson
查看>>
什么样的企业可以称之为初创企业?
查看>>
Python爬虫之BeautifulSoup
查看>>
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>