【YBTOJ】逐个击破

2023-10-09 14:30
文章标签 击破 逐个 ybtoj

本文主要是介绍【YBTOJ】逐个击破,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

思路:

我们可以把题目转化成,现在有一些各不连通的点,然后要联通其中一些边,使得特殊点不在一个连通块里,然后求最大的连边权值
我们可以贪心暴力,每次考虑连最大的边,然后判断两个连通块是否都有特殊点,如果都有那就不连,如果其中一个有,那就把没有的那个连向那个有的,这样就可以保证没有的那个连通块每次找到的最终祖先都是那个有特殊点的最终祖先。

c o d e code code

#include<iostream>
#include<cstdio>
#include<algorithm>using namespace std;int n, m, k;
int fa[1001000];
bool v[1001000];
struct node
{int x, y, z;
}a[100100];bool cmp(node x, node y)
{return x.z>y.z;
}int find(int x)
{if(fa[x]==x)return x;return fa[x]=find(fa[x]);
}int main()
{scanf("%d%d%d", &n, &m, &k);//m=n-1;for(int i=1; i<=k; i++){int x;scanf("%d", &x);v[x]=1;}for(int i=0; i<=n; i++)fa[i]=i;long long ans=0;for(int i=1; i<=m; i++){scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].z);ans+=a[i].z;}sort(a+1, a+1+m, cmp);for(int i=1; i<=m; i++){int fx=find(a[i].x);int fy=find(a[i].y);if(fx==fy){ans-=a[i].z;continue;}else if(!v[fx]&&!v[fy]){ans-=a[i].z;fa[fx]=fy;continue;}else if(v[fx]&&!v[fy]){ans-=a[i].z;fa[fy]=fx;continue;}else if(!v[fx]&&v[fy]){ans-=a[i].z;fa[fx]=fy;continue;}}printf("%lld", ans);return 0;
}

这篇关于【YBTOJ】逐个击破的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/173493

相关文章

堆(逐个添加元素创建堆)-堆结构的创建+堆结构的实际应用

一、问题引入 一堆数据的值在不断变化,我们想要从这堆数据中获取到最大值或者最小值(比如电影排行榜中电影的排名,每部电影观看人数越多,那么该部电影的排名就越高) 1、数据结构解决的是数据的存储问题,算法解决的是存储了的数据的使用效率问题 2、数据结构里面的堆结构(heap)和Java语言中的数据堆不一样 3、数据结构里面的堆结构本质上是数组 4、数组的元素查询效率高(由于使用索引查询),时

字符串处理算法(二)逐个打印中文字符串

根据帖子: http://bbs.csdn.net/topics/390598291里的要求: C/C++ code ?

安卓Kotlin 实现动态逐行逐个添加控件

思路为在竖向LinearLayout上添加多个横向LinearLayout,从而实现动态排列。控件以按钮为例 竖向LinearLayout <ScrollViewandroid:id="@+id/s"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toTopOf="paren

sparkJavaApi逐个详解

说明:掌握spark的一个关键,就是要深刻理解掌握RDD各个函数的使用场景,这样我们在写业务逻辑的时候就知道在什么时候用什么样的函数去实现,得心应手,本文将逐步收集整理各种函数原理及示例代码,持续更新,方便大家学习掌握。 函数列表:   1、join的使用 2、cogroup的使用 3、GroupByKey的使用 4、map的使用 5、flatmap的使用 6、mapPartitions的使

JavaFX 动态加载目录下所有WAV文件并逐个播放

在JavaFX中动态加载一个目录下的所有.wav文件并逐个播放,你可以使用java.nio.file包来遍历目录,并使用javax.sound.sampled包来播放音频文件。不过,需要注意的是,JavaFX本身并不直接支持音频播放,但你可以使用Java的标准库来播放音频,并在JavaFX应用中同步这些操作。 以下是一个简单的步骤说明和示例代码: 遍历目录并获取所有.wav文件:使用Files

Excel里,逐个打字录入信息太慢了?试试这个方法吧!

转自:https://www.pinlue.com/article/2021/06/1010/5111631711832.html

用C#逐个读取EXCEL单元格内容

用C#逐个读取EXCEL单元格内容             Microsoft.Office.Interop.Excel.Application xApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); Microsoft.Office.Interop.Excel.Workbook xBook1 = xApp.Workboo

求f函数【Ybtoj】

D e s c r i p t i o n Description Description 给出一个函数: f ( x ) = { f ( f ( x + 11 ) ) ( x ≤ 100 ) x − 10 ( x ≥ 101 ) f(x)=\left\{ \begin{aligned} f(f(x+11))\quad\quad(x\leq 100)\\ x-10\quad\quad\qua

划分数列【Ybtoj】

D e s c r i p t i o n Description Description 给定一个长度为 n n n的数列A ,要求划分最少的段数,使得每一段要么单调不降,要么单调不升。 I n p u t Input Input 第一行一个整数 n n n。 接下来 n n n个数表示数列A。 O u t p u t Output Output 输出最少的划分数。 S a

平铺方案【Ybtoj】

D e s c r i p t i o n Description Description 您可以通过几种方式用 2 ∗ 1 2*1 2∗1或 2 ∗ 2 2*2 2∗2瓦片平铺 2 ∗ n 2*n 2∗n矩形? 这是一个 2 ∗ 17 2*17 2∗17矩形的样本拼贴: I n p u t Input Input 每行一个整数 n n n。 O u t p u t Output