【ybtoj 高效进阶 3.1】 【并查集】 逐个击破

题目



解题思路

换一个思路
求出保留的边
用总边权减去保留的
能被保留下来的边的两个端点不能都被k军团占领
我们要做的就是维护每个连通块
有被占领的集合代表就是被占领的,否则无所谓
按边权降序排序
判断每一条边的两个端点
如果有没被占领的就减去此条边权
两个端点如果不在同一集合
合并两个集合


代码

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,k,x,p[100010],fa[100010];
long long ans;
struct lzf{int x,y,w;
}f[500010];bool cmp(lzf l,lzf r)
{return l.w>r.w;
}int find(int x)
{if(x==fa[x])return x;else return fa[x]=find(fa[x]);
}int main(){scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=k;i++){scanf("%d",&x);p[x+1]=1;}for(int i=1;i<=m;i++){scanf("%d%d%d",&f[i].x,&f[i].y,&f[i].w);f[i].x++,f[i].y++;  //从1开始,不++只有60分OTATOans+=f[i].w;}  sort(f+1,f+m+1,cmp);for(int i=1;i<=m;i++){int xx=find(f[i].x),yy=find(f[i].y);  //查找所在集合元素if(xx==yy)  //同一集合不合并ans-=f[i].w;else if(!p[xx]||!p[yy])  //不在同一集合且没有都被占领,合并{ans-=f[i].w;if(!p[xx])fa[xx]=yy;else fa[yy]=xx;}}printf("%lld",ans);
}

【ybtoj 高效进阶 3.1】 【并查集】 逐个击破相关推荐

  1. 【ybtoj 高效进阶 1.5】【广搜】 荆轲刺秦王

    [ybtoj 高效进阶 1.5][广搜] 荆轲刺秦王 解题思路 预处理 士兵的监测范围可以用查分做 例,士兵监测范围是3,如图 在每一行能被看到的起点+1,看不到的第一个-1 最后用前缀和求出所有范围 ...

  2. 【ybtoj高效进阶6-6-2】 期望分数/WJMZBMR打osu! / Easy 【luogu P1365】

    期望分数[ybtoj高效进阶6-6-2] WJMZBMR打osu! / Easy [luogu P1365] 题目描述: 给定一个长度为n的由 o,x,? 组成的字符串.计算分数的规则如下:连续 a ...

  3. 【ybtoj 高效进阶 5.1】【动态规划】求好感度

    [ybtoj 高效进阶 5.1][动态规划]求好感度 题目 解题思路 直接用多重背包的话会TLE 所以呢,将件数ai二进制分组 用0/1背包 代码 #include<iostream> # ...

  4. 算法竞赛进阶指南0x41 并查集

    并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并与查询的数据结构.详细地说,并查集包括如下两个基本操作: 1.Get:查询一个元素属于哪一个集合. 2.Merge:把 ...

  5. 《ybtoj高效进阶》第五部分第六章例题3 耗费体力

    题目大意 跳跳虎喜欢在树林间跳跃,它从一棵较高的树跳到一棵较矮的树不需要消耗体力,否则消耗一点体力. 给出一排树,在一轮游戏的开始,跳跳虎在第111棵树,它要跳到第nnn棵树.每轮游戏有一个步伐限制 ...

  6. 0x41.数据结构进阶 - 并查集

    目录 一.路径压缩与按秩合并 1.AcWing 237. 程序自动分析(NOIP2015) 二.边带权并查集 1.AcWing 238. 银河英雄传说(边带权并查集模板) 2.AcWing 239. ...

  7. 并查集(Union-Find-Set)简洁而高效地处理连通分量的查询与合并

    并查集(Union-Find-Set)简洁而高效地处理连通分量的查询与合并 并查集由一个整型数组和两个函数构成 1.数组pre[]:记录每个结点的前导结点(父节点),初始化为:pre[i]=i 2.函 ...

  8. 数据结构进阶之并查集

    1.初探并查集 例题1:AcWing 237.程序自动分析 这题的思路其实比较好想,只要先考虑所有等于的情况并合并,然后再看不等于的情况,看是否出现矛盾即可.但是这题显然是需要离散化的,但是离散化也很 ...

  9. YbtOJ 躲避拥挤(并查集)

    目录: 前置知识 题目描述 样例与数据范围 解题思路 AC 代码 前置知识:         并查集 (路径压缩),快速排序(sort),结构体 题目描述: 样例与数据范围: 解题思路: 在并查集的专 ...

最新文章

  1. Android开发常用第三方平台
  2. 面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)...
  3. SSH-permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
  4. 通信工程制图期末考试大纲
  5. 大脑使用书全6册有用吗_常锻炼“人体第二大脑”的孩子,不仅智商高,记忆力也很强...
  6. Jupyter-notebook安装问题及解决
  7. FB正在大规模重构React Native,预计今年发布
  8. c:foreach中varStatus参数的含义
  9. 20160504课堂作业
  10. ni max不能连续采集图像_1.6视觉检测项目过程分解——程序的连续运行
  11. 逻辑运算 神经网络_使用神经网络实现逻辑门(第2部分)
  12. SqlServer利用ODBC连接Mysql数据库
  13. 打开CMD的方式及常用的DOS命令
  14. android studio代理设置
  15. 从这条博客开始转变!
  16. 同样嗑B站6个月,被室友吊打 35K Offer!
  17. c语言中整除和模除的优先级,整除运算与取模运算
  18. 使用HorizontalListView仿车来了公交时刻表
  19. 肖特基二极管(SBD)和开关二极管的工作原理及选型的学习总结
  20. 机械检索和计算机检索,手工检索和计算机检索的优缺点

热门文章

  1. Java爬虫批量爬取图片
  2. H5中需要掌握的 ANIMATION 动画效果
  3. Unity Vuforia AR生成详细教程
  4. python 排课算法_基于遗传算法的排课系统
  5. ARouter源码详解
  6. 游戏云间之五:游戏架构
  7. Beaglebone Black 最小Linux从零系统编译
  8. 解决 Mathematica 无法启动的问题
  9. 手机端自定义日历组件(vue)
  10. 联想超融合服务器安装系统,联想AIO超融合产品介绍.pdf