Luogu P2700 逐个击破
同关押罪犯
对于这种希望几个对象分开的题目,只要把并查集反过来想就可以了。
既然要求删除的边权最小,那么只要反过来求给定的点不连通时保留的边权最大即为正解。
同样的,首先将边权排序,不会使敌人连通则连接。
注意事项:1.初始化 2.最后的答案要定义为long long
bin哥今天讲的:
当加入一条边时,它连接的点只有两种情况:
1.都被占领,这时不能连接;
2.其中一个被占领,需要把另一个也标记为已占领(其实只要把父节点标记就可以了,所以只有(子 & !父)的情况下需要修改);
3.都未被占领,连接也无影响,不需要操作。
所以我原来写的:
if(col[xx] && col[yy] && (col[xx]!=col[yy]))continue;
if(col[yy])col[xx] = col[yy];
fa[yy] = xx;
......
就是用染色的方式记录是否连接到敌人。(不知道为什么错了quq)
不过对于这道题,边数为n-1(是一棵树),则一定不会出现环,所以不需要判断连接到的敌人是否是同一个地方,
只要判断有没有占领就行了(占领则一定不同)。
用bool代替int:
if(col[xx] && col[yy])continue;
if(col[yy])col[xx] = true;
代码如下
#include<cstdio>
#include<algorithm>
using namespace std; const int maxn = ;
int fa[maxn];
bool col[maxn];
int n,k,p;
long long sum; struct xyw {
int x,y,w;
}g[maxn]; int getfa(int x){
if(fa[x] == x)return x;
else return fa[x] = getfa(fa[x]);
} bool cmp(xyw i,xyw j){
return i.w > j.w;
} int main() {
scanf("%d%d",&n,&k);
for(int i = ;i <= n;i++)
fa[i] = i;
for(int i = ;i <= k;i++){
scanf("%d",&p);
col[p] = true;
}
for(int i = ;i <= n-;i++){
scanf("%d%d%d",&g[i].x,&g[i].y,&g[i].w);
sum += g[i].w;
}
sort(g+,g+n,cmp);
for(int i = ;i <= n-;i++){
int xx = getfa(g[i].x);
int yy = getfa(g[i].y);
if(col[xx] && col[yy])continue;
if(col[yy])col[xx] = true;
fa[yy] = xx;
sum -= g[i].w;
}
printf("%lld",sum);
return ;
}
Luogu P2700 逐个击破的更多相关文章
- 洛谷P2700 逐个击破
P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,毛主席制 ...
- P2700逐个击破(并查集/树形dp)
P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,老毛同志 ...
- 洛谷 P2700 逐个击破
P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,毛主席制 ...
- P2700 逐个击破 最小生成树
题目描述 现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的,现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少的代价将这 ...
- P2700 逐个击破
题意:现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的, 现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少的代价将这K ...
- 并查集【p2700】逐个击破
题目描述-->p2700 逐个击破 题意概括 花费最小的代价,使得一些有标记的节点不连通. 分析 我们需要花费最小代价使得原来连通的图中一些节点之间不相互连通. 贪心显然是可行的(一点也不显然 ...
- tyvj P3737 逐个击破
http://tyvj.cn/p/3737 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 秉承伟大军事家的战略思想,作为一个有智慧的军长你,遇到了一个类似的 ...
- tyvj3737 逐个击破
描述 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,mzd制定了先切断敌人东洒两头退路 ...
- 剑指offer_面试题6_重建二叉树(分解步骤,逐个击破)
题目:输入某二叉树的前序遍历和中序遍历的结果.请重建出该二叉树.如果输入的前序遍历和中序遍历的结果中都不含反复的数字. 比如:输入前序遍历 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7 ...
随机推荐
- 10种JavaScript开发者必备的VS Code插件
摘要: 好的代码插件可以让工作效率翻倍,心情也更加舒畅! 原文:10 Must-have VS Code Extensions for JavaScript Developers 作者:Michael ...
- Fundebug前端JavaScript插件更新至1.2.0
摘要: Fundebug的前端JavaScript错误监控插件更新至1.2.0:支持监控WebSocket连接错误:修复了监控unhandledrejection错误的BUG,即未用catch处理的P ...
- Csharp:Paging Sorting Searching In ASP.NET MVC 5
http://www.c-sharpcorner.com/UploadFile/0c1bb2/sorting-paging-searching-in-Asp-Net-mvc-5/ https://dz ...
- 小结:ES7——async和await初识
一.async async其实是ES7才有有的关键字,async的意思是异步,顾名思义是有关异步的操作 async用于声明一个函数是异步的. 通常情况下async.await都是跟随promise一起 ...
- Web.config配置customErrors mode为Off后依然不显示具体错误的可能原因。
有时候我们的网站程序在本地运行没有问题,但在上传到远程服务器后则报错.这就需要我们了解具体错误,但IIS默认只显示统一的运行时错误,想要知道具体错误就需要配置Web.config中customErro ...
- (后端)NoSuchMethodError
这个错误是说编译时有这个方法,但运行时没有了 请使用:mvn clean install
- python爬虫之pyquery学习
相关内容: pyquery的介绍 pyquery的使用 安装模块 导入模块 解析对象初始化 css选择器 在选定元素之后的元素再选取 元素的文本.属性等内容的获取 pyquery执行DOM操作.css ...
- linux 开机自启动脚本
在/etc/rc.local文件中添加自启动命令(其中一种方法) 1.案例,就用博主本人之前发的博文 “nginx + flask + uwsgi + centos + python3 搭建web项目 ...
- 消除TortoiseSVN 检出到(checkout)桌面上显示一堆问号
之前不小心直接将版本库的内容检出到桌面,后才发现桌面上的文件图标都变成了问号,新建文件夹也同样如此. 为了解决这个问题,采用如下方法(任何一个检出文件夹均可这样操作): 1.删除桌面隐藏的.SVN文件 ...
- CRM原型
https://files.cnblogs.com/files/wcLT/CRM.zip