【luogu2700】逐个击破

洛谷 P2700逐个击破 题解 C++ 洛谷 P2700逐个击破 题解 C++ 文章目录洛谷 P2700逐个击破 题解 C++题目大意思路贪心证明详细做法代码样例 题目大意 给定N个点的一棵树以及N-1条无向边和该边的销毁代价w,要求其中K个点互相不能到达所花费的最小代价 K<N<105,1<=w<=106 思路 我们先想一下可不可以删边,想不出什么思路?好像很不可做的样子。正难则反,我们是不是可以选择尽可能选择边使得K个被占领的点互相不连通且边权和最大(最大不连通边权和),那么删去边的边权之和就是总边权和-最大的不连通边 阅读详情

并查集,加最小生成树技巧。循环搜索边的最大权值,如果边两边是需要隔离开的,则删除该边。
直接考虑原问题比较困难,我们可以这么想:删去的最少=留下来的最多。
那么我们考虑用类似于最小生成树的思想。在使用Kruskal算法时,并查集还要保存一个是否已经有敌人的城市。然后合并的时候必须要两个集合不是都有敌人的城市(最多只有一个集合有敌人的城市)才可以合并。

#include<cstdio>
#define N 110000
struct node1{
	int x,y,z;
};
struct node2{
	bool f;int father;
};
node1 data[N];
node2 a[N];
int aa,n,k,h[N];
int gf(int x){
	if (a[x].father==x) return x;
	a[x].father=gf(a[x].father);
	return (a[x].father);
	
}
void qsort(int l,int r){
	int i=l,j=r,mid=(data[(l+r)/2].z);
	node1 t;
	while (i<=j){
		while (data[i].z>mid)++i;
		while (data[j].z<mid)--j;
		if (i<=j){
			t=data[i];data[i]=data[j];data[j]=t;
			++i;--j;
		}
	}
	if (l<j) qsort(l,j);
	if (i<r) qsort(i,r);
}
int main(){
	freopen("attack.in","r",stdin );
	freopen("attack.out","w",stdout);
	int num=0;
	scanf("%d%d",&n,&k);
	for (int i=0;i<n;++i){
		a[i].father=i;
		a[i].f=true;
	}
	for (int i=1;i<=k;++i) {
		scanf("%d",&aa);
		a[aa].f=false;
	}
	
	for (int i=1;i<n;++i){
		int a1,a2,a3;
		scanf("%d%d%d",&a1,&a2,&a3);
		data[++num].x=a1;
		data[num].y=a2;
		data[num].z=a3;
	}
	qsort(1,n-1);
	long long ans=0;
	for (int i=1;i<n;++i){
		int x=data[i].x,y=data[i].y;
		int fa=gf(x),fb=gf(y);
		if ((a[fa].f==a[fb].f)&&(a[fa].f==true)&&fa!=fb) {
			a[fa].father=a[fb].father;
			continue;
		}
		if (a[fa].f!=a[fb].f){
			a[fa].father=a[fb].father;
			a[fb].f=false;
			continue;
		}
		if ((a[fa].f==a[fb].f)&&(a[fa].f==false)){
			ans+=data[i].z;
		}
	}
	printf("%lld",ans);
	//for (int i=1;i<n;++i) printf("%d ",data[i].z);
	return 0;
}
2021.5.21开始的兔系刷题之路 根据LeetCode分类进行逐个击破 培养出自己的套路~ 从前辈们的学习经验中获得建议 并开始一点点地实践 争取一天可以刷一道题 慢慢地把这些专题都刷过来! 阅读详情

相关推荐

【题解】逐个击破 luogu2700

题目 题目描述: 现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的。 现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少的代价将这K个地方军团互相隔离开,以便第二步逐个击破敌人。 输入格式 第一行包含两个正整数n和k。 第二行包含k个整数,表示哪个城市别敌军占领。 接下来n-1行,每行包含三...

C@bMv7GRVt)Q 302

逐个击破

题目链接:逐个击破 正难则反。(其实正面虚树上面dp也可以) 最小的删边,其实就是最大的留边。最后用总和减去最大的留边就是答案。 首先对边排序。从大到小排序。 如果这两个点都是敌人,那么不连边。否则连边。如果有一个敌人,有一个我方,那么连边之后,对于这个联通块就不能再连敌人了。所以再标记根。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-l...

青烟绕指柔的博客 1137

KEPServerEX实战:Modbus TCP与RTU双协议配置详解

本文详细解析了如何使用KEPServerEX软件同时配置与管理Modbus TCP和RTU混合网络。通过实战步骤,指导用户建立双协议通道、配置设备与标签,并分享核心的地址映射规则与通讯故障排查技巧,帮助工业自动化工程师高效集成多协议设备,简化数据采集架构。

weixin_29186249的博客 397

【洛谷】P2700 逐个击破

!

m0_74969835的博客 520

tiktok算法协议研究

经过上述分析,可以确定目标字符串来源于一段 JSON 数据,而这段 JSON 数据来自于一个经过加密的本地文件。对字符串 "sdi_v2" 进行 SHA-1 计算,得到 20 字节的结果;将第一步得到的数据进行MD5计算,生成16字节的结果;将第二步的结果转换为十六进制字符串,从而得到 32 字节的密钥。写这种算法分析的帖子真的是太无聊了,就先分析到这里吧,后续有机会再来谈下被加密的本地文件是怎么来的!!自我感觉TT的算法并不难,就是量太大了,所以我想问问有没有感兴趣的朋友来一起分析,欢迎联系。

2503_90751938的博客 2581

Linkage Mapper 工具参数详解——Building Network and Map Linkages

此文档用于解析使用LinkageMapper各输入输出参数详情以及可能的影响,并介绍了如何解释模型输出结果和输出参数,适合刚入手的人。篇幅很长很啰嗦,是因为每个参数都解释的万分细致。

sumuses的博客 6119

逐个击破(并查集)

逐个击破 解题思路 把公路看作边 把城市看作点 被占领的城市称为特殊点 这题就成了 求使特殊点互不连通的最优删边方案 AC代码 #include<algorithm> #include<cstdio> using namespace std; long long n,m,k,x,ans,b[1000005],f[1000005]; struct node { long long x,y,z; }a[1000005]; bool cmp(node x,node y) { retu

我很菜的好吧 310

把 SAP Event Mesh 讲透:从事件驱动架构到 SAP BTP 落地实践

摘要: SAP Event Mesh是SAP BTP上的云端消息与事件服务,支持企业构建解耦、弹性的应用架构。它通过异步通信模式(如发布/订阅)解决传统同步集成的痛点,如系统紧耦合、链路脆弱等问题。核心能力包括事件驱动通信、可靠消息投递(支持至少一次送达)、与SAP生态深度集成(如S/4HANA事件扩展)以及混合环境支持。典型场景包括订单处理、库存同步等,发布方只需发出业务事件,订阅方按需消费,避免系统间直接依赖,符合Clean Core理念。两种关键模式为广播式的Publish/Subscribe和定向的

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 117

luogu 2700 逐个击破

luogu 2700 逐个击破 最大生成树,最大生成森林

Anonymous_jacklovecj的博客 444

SAP-ABAP:在SAP系统中,COEP表(成本控制对象行项目表)详解

在SAP系统中,COEP表(成本控制对象行项目表)详解

baidu_35680696的博客 1840

Unreal5从入门到精通之一文搞懂Unreal的C++代码编译之谜

我们在开发Unreal项目时,如果时蓝图模板的项目,一般问题不大,因为当你修改完蓝图,点击编译Compile+保存Save,就可以继续开发了。这对于开发者来说也非常友好。但是,如果你使用的C++模板开发项目,代码编译一切都变得魔幻起来,IDE(VS/Rider)里面有编译,编辑器里面也有编译,有什么区别呢?我们来列举几个新手常碰到的问题。1.代码我明明新建了,编辑器里怎么看不到?2.昨天我新家的功能运行的好好的,今天怎么感觉还是老逻辑。或者昨天加的新代码,新蓝图不见了。

TxNet 1606

luogu P2700 逐个击破

思维题,套路题。 本来想在学完树形dp,开始做数据结构前刷几道水题愉悦一下身心,结果tm直接匹配了一道不用树形dp十分有意思的题 思路:考虑题目的转化:将删除的边数最小转化为留下的权值最大,用kruskal的思想加边,如果两点都是敌人直接切,如果一方是敌人,先不管,将另一方感染为敌人。这也是拆边连通性问题的一般思路。 code: #include<bits/stdc++.h> #def...

weixin_30654583的博客 165

【Bug已解决】openclaw max turns reached / Tool calls exceeded limit — OpenClaw 最大轮次超限解决方案

OpenClaw 在执行过程中达到最大轮次限制任务未完成,本质是 --max-turns 设置过小或任务过于复杂。文中给出增加轮次、--continue 继续、分步执行等完整方案。

一键难忘的博客 5505

luogu P2700 逐个击破

嘟嘟嘟 这道题只要树形dp做的熟练的话就能秒(显然我不能)。 令dp[u][0 / 1]表示u所在的子树和u相连的联通块没有/有敌人的最少代价。而且按题中所述,这个联通块只能有1个敌人。 分情况: 若敌人在节点u: 则dp[u][0] = INF,dp[u][1] = Σmin{dp[v][0], dp[v][1] + w[i]}。 若敌人不在u: 则dp[u][0]...

weixin_30908103的博客 169

增量学习入门:概念、代码示例与应用场景

在当今快速变化的数据环境中,传统的机器学习模型往往需要重新训练以适应新的数据。然而,这种方法不仅耗时耗力,还可能导致模型性能的不稳定。增量学习(Incremental Learning)作为一种新兴的学习范式,能够在新数据到来时动态更新模型,而无需重新训练整个模型。本文将详细介绍增量学习的基本概念、代码示例、应用场景以及需要注意的事项。增量学习作为一种高效的机器学习方法,能够在新数据到来时动态更新模型,具有广泛的应用前景。通过本文的介绍,相信你对增量学习有了初步的了解。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1152

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Luogu P2700 逐个击破

qwq 同关押罪犯 对于这种希望几个对象分开的题目,只要把并查集反过来想就可以了。 既然要求删除的边权最小,那么只要反过来求给定的点不连通时保留的边权最大即为正解。 同样的,首先将边权排序,不会使敌人连通则连接。 注意事项:1.初始化  2.最后的答案要定义为long long bin哥今天讲的: 当加入一条边时,它连接的点只有两种情况: 1.都被占领,这时不能连接; 2....

weixin_30765505的博客 101

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【ybt高效进阶3-1-6】【luogu P2700】逐个击破

有 n 个点,m 条边,每条边有价值。要你删去总价值尽可能小的边,使得一些规定的点不能相互连通。

欢迎您的光顾awa 310

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LuoguP2700逐个击破【并查集/生成树/正难则反】By cellur925

题目传送门 题目大意:给你一棵树,求把其中k个点相互隔离(不连通)所需要的边权代价。 这题我开始是想要求出把k个点联通的最小代价的,但后来发现还是实现起来比较困难,题解里貌似也没有这种做法,于是就鸽了。但是大体的思考方向还是不直接去想把k个点隔离,而是把问题转化。 花费最小代价删边->花费最大代价建边。而建边的时候如果遇到一条两边都是敌人的边,我们显然是不需要建的,所以这其实...

weixin_30561425的博客 163

告别画面撕裂!利用STM32F429 LTDC垂直消隐中断与DMA2D实现流畅UI刷新

本文详细介绍了如何利用STM32F429的LTDC垂直消隐中断与DMA2D技术解决嵌入式GUI开发中的画面撕裂问题。通过垂直消隐期的安全窗口和DMA2D高效显存更新策略,实现流畅的UI刷新,适用于菜单切换、动画渲染等场景,显著提升视觉体验。

weixin_30570101的博客 792

【洛谷P2700】【JZOJ2936】逐个击破【并查集】

题目大意: 题目链接:https://jzoj.net/senior/#main/show/2936 题目图片: http://wx4.sinaimg.cn/mw690/0060lm7Tly1fwdvsmk40uj30jh0gw0tb.jpg http://wx2.sinaimg.cn/mw690/0060lm7Tly1fwdvsmjlq6j30j20fodfw.jpg 给出一棵树和几个标记点,每...

stoorz 353

luogu4185 [USACO18JAN]MooTube Gold

http://www.elijahqi.win/2018/02/02/luogu4185-usaco18janmootube-gold/ 题目描述 In his spare time, Farmer John has created a new video-sharing service, which he names MooTube. On MooTube, Farmer John’s c

Elijahqi 4715

bzoj4998 星球联盟

http://www.elijahqi.win/2018/02/15/bzoj4998/ ‎ Description 在遥远的S星系中一共有N个星球,编号为1…N。其中的一些星球决定组成联盟,以方便相互间的交流。但是,组成 联盟的首要条件就是交通条件。初始时,在这N个星球间有M条太空隧道。每条太空隧道连接两个星球,使得它们能 够相互到达。若两个星球属于同一个联盟,则必须存在一条环形线路经过...

Elijahqi 726

bzoj5194 [Usaco2018 Feb]Snow Boots

http://www.elijahqi.win/2018/03/05/bzoj5194-usaco2018-febsnow-boots/ Description 到冬天了,这意味着下雪了!从农舍到牛棚的路上有N块地砖,方便起见编号为1…N,第i块地砖上积了fi英尺的雪 。在Farmer John的农舍的地窖中,总共有B双靴子,编号为1…B。其中某些比另一些结实,某些比另一些轻便。具 体地...

Elijahqi 637
上一篇: Python应用math模块分析保险理- 学习笔记
下一篇: numpy使用之 Python计算年金
elijahqi
博客等级 码龄9年 55粉丝 1280原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值