
带权并查集 HDU - 3047
发布日期:2021-05-06 14:13:07
浏览次数:32
分类:精选文章
本文共 804 字,大约阅读时间需要 2 分钟。
题意: 一圈座位有n个,给出m组序号之间的关系,比如,1 2 150 代表2号坐在1号位置序号+150,看m组数据有多少组冲突的。
思路: 带权并查集模板。#include#include #include #include #include #include #include using namespace std;#define N 50010int f[N],n,m,val[N],cnt;int getf(int v){ if(f[v]==v) return v; int t=f[v]; f[v]=getf(f[v]);/*压缩路径*/ val[v]+=val[t];/*记录当前节点到祖先节点的权值和(在压缩路径的过程中,遍历到他的祖先,加上权值)*/ return f[v];}void marge(int u,int v,int s){ int t1=getf(u),t2=getf(v); if(t1!=t2) { f[t2]=t1;/*搞清楚节点之间的父子关系!!!*/ val[t2]=val[u]-val[v]+s;/*向量*/ } else if(val[v]!=val[u]+s)/*祖先相同,之间距离关系也应该正确,否则矛盾*/ cnt++;}int main(){ while(~scanf("%d%d",&n,&m)) { cnt=0; for(int i=1; i<=n; i++) f[i]=i,val[i]=0; int v,u,s; for(int i=1; i<=m; i++) { scanf("%d%d%d",&u,&v,&s); marge(u,v,s); } printf("%d\n",cnt); } return 0;}
发表评论
最新留言
很好
[***.229.124.182]2025年03月29日 16时41分32秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
上周热点回顾(5.1-5.7)
2019-03-06
上周热点回顾(6.19-6.25)
2019-03-06
云计算之路-阿里云上:docker swarm 集群故障与异常
2019-03-06
上周热点回顾(2.19-2.25)
2019-03-06
云计算之路-阿里云上:博客web服务器轮番CPU 100%
2019-03-06
云计算之路-阿里云上:服务器CPU 100%问题是memcached连接数限制引起的
2019-03-06
上周热点回顾(3.26-4.1)
2019-03-06
上周热点回顾(6.25-7.1)
2019-03-06
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
2019-03-06
工作半年的思考
2019-03-06
不可思议的纯 CSS 滚动进度条效果
2019-03-06
【CSS进阶】伪元素的妙用--单标签之美
2019-03-06
惊闻NBC在奥运后放弃使用Silverlight
2019-03-06
IE下尚未实现错误的原因
2019-03-06
创建自己的Docker基础镜像
2019-03-06
HTTP 协议图解
2019-03-06
Python 简明教程 --- 20,Python 类中的属性与方法
2019-03-06
KNN 算法-理论篇-如何给电影进行分类
2019-03-06
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2019-03-06