poj3723 Conscription Kruscal算法最大生成森林

#100-【最小生成森林(最小生成树变种)】灌水 #100祭! Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记。把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库。 建造一个水库需要花费wi(1<=wi<=100000),连接两块土地需要花费Pij(1<=pij<=100000,pij=pji,pii=0). 计算Far... 阅读详情

Conscription
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 9902 Accepted: 3502

Description

Windy has a country, and he wants to build an army to protect his country. He has picked up N girls and M boys and wants to collect them to be his soldiers. To collect a soldier without any privilege, he must pay 10000 RMB. There are some relationships between girls and boys and Windy can use these relationships to reduce his cost. If girl x and boy y have a relationship d and one of them has been collected, Windy can collect the other one with 10000-d RMB. Now given all the relationships between girls and boys, your assignment is to find the least amount of money Windy has to pay. Notice that only one relationship can be used when collecting one soldier.

Input

The first line of input is the number of test case.
The first line of each test case contains three integers, N, M and R.
Then R lines followed, each contains three integers xi, yi and di.
There is a blank line before each test case.

1 ≤ N, M ≤ 10000
0 ≤ R ≤ 50,000
0 ≤ xi < N
0 ≤ yi < M
0 < di < 10000

Output

For each test case output the answer in a single line.

Sample Input

2

5 5 8
4 3 6831
1 3 4583
0 0 6592
0 1 3063
3 3 4975
1 3 2049
4 2 2104
2 2 781

5 5 10
2 4 9820
3 2 6236
3 1 8864
2 4 8326
2 0 5156
2 0 1463
4 1 2439
0 4 4373
3 4 8889
2 4 3133

Sample Output

71071
54223



根据题意,只要用排序优化的Kruscal算法求出带有最大权值和的生成森林,森林的权值和是ans,则(N + M) * 10000 - ans即为最小cost


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>

using namespace std;

struct Edge {
	int u, v, w;
	Edge() {}
	Edge(int u, int v, int w) : u(u), v(v), w(w) {}
};

vector<Edge> edges;

int N, M, R;
int p[20010];

bool cmp(const Edge a, const Edge b) {
	return a.w > b.w;  //从大到小排序
}

int Find(int x) {  //并查集
	return p[x] == x ? x : p[x] = Find(p[x]);
}

int Kruscal() {
	for (int i = 0; i < N + M; i++) p[i] = i;
	sort(edges.begin(), edges.end(), cmp);
	int ans = 0;
	for (int i = 0; i < edges.size(); i++) {
		int x = Find(edges[i].u), y = Find(edges[i].v);
		if (x != y) {
			p[y] = x;
			ans += edges[i].w;
		}
	}
	return (N + M) * 10000 - ans;
}

int main()
{
	int T;
	scanf("%d", &T);
	while (T--) {
		edges.clear();
		scanf("%d%d%d", &N, &M, &R);
		int u, v, w;
		for (int i = 0; i < R; i++) {
			scanf("%d%d%d", &u, &v, &w);
			//为了分别girl和boy,将v平移N,这么做放在一个数组里也方便计算并查集
			edges.push_back(Edge(u, v + N, w));
		}
		printf("%d\n", Kruscal());
	}
	return 0;
}



Kruscal 最小生成树算法 C写的 自己写的最小生成树算法,请自己在同一个目录下建立一个gtest。txt的文件。 然后编译,这是在linux下写的,应该移植没有问题 C语言写的 立即下载

相关推荐

编程语言的未来走向:趋势、挑战与机遇

同时,鼓励他们接触和掌握一些专业领域的开发工具和技术框架,比如Web开发中的JavaScript、React.js,数据分析的Python(Pandas, NumPy, Matplotlib等),以及人工智能和机器学习领域的TensorFlow、PyTorch等。当前,全球范围内正积极推动编程教育的普及化,从儿童启蒙阶段到高等教育阶段,乃至终身学习的过程中,如何优化编程语言的教学方法、提高教学质量,并将其广泛应用于不同领域,是教育者与政策制定者面临的重大课题。未来,编程语言的多样化和包容性将会继续加强。

zrc_xiaoguo的博客 1826

[NOIP模拟][最大生成森林]拆墙

题目描述: 地主的傻儿子豆豆家很大很大,由很多个区域组成。其中有不少封闭的区域,豆豆觉得很不爽于是决定拆墙,把家打通使得他可以访问到每一个区域(包括家外面无限大的区域)。我们用 N 个端点和 M 条边来描述豆豆的家。第 i 个端点的坐标为(xi,yi),第 i 条边连接端点 Ai 和 Bi,拆除所需要花费的力气为 Ci 。保证所有边只在端点相交,也就是这是一个平面图,也没有重边和自环。 现在豆豆

千古的博客 1014

脑机接口(BCI)从原理到开发实战 07|运动想象BCI实战:基于BCI Competition IV 2a数据集

本文基于BCI Competition IV 2a数据集,详细介绍运动想象脑机接口系统的全流程实现。首先概述了该数据集的实验范式、参数特点和优势,然后指导环境准备与数据下载。通过代码示例展示了数据加载、事件标记提取和信号可视化方法。重点构建了完整的预处理流水线,包括通道选择、重参考、带通滤波(8-30Hz)和ICA去伪迹等关键步骤。文章旨在帮助读者将零散的BCI知识整合为完整的实战项目,掌握从原始脑电数据到运动意图解码的核心技术。

小明的博客 845

POJ 3723 Conscription(最大生成森林)

题目链接:http://poj.org/problem?id=3723 题意需要征募男兵M人,女兵N人,每征募一个人需要10000元,但是已经征募 的人中有和待征募的人关系密切的可以少花点钱,求通过适当的顺序使得征募所有人所需的费用最小。 思路:这是二分图的背景,是陷阱,没用,征募a动用了a和b关系,那么(a,b)连成一条边,虽然这条边是有向的,但是不管是谁先征募最后的结果都相同所以是无向图的

kalilili的专栏 1397

Hypermesh2021实战:塑料圆盘结构化网格划分全流程(附避坑指南)

本文详细介绍了使用Hypermesh2021进行塑料圆盘结构化网格划分的全流程操作,包括几何预处理、网格生成策略及质量验证。特别针对工程实践中常见的12个典型问题提供解决方案,帮助用户提升CAE仿真分析的精度和效率。

weixin_29294597的博客 317

VS2019配置Qt5.14.2开发环境全流程(含MSVC2017 64-bit选择指南)

本文详细介绍了在VS2019中配置Qt5.14.2开发环境的完整流程,特别针对MSVC2017 64-bit编译器的选择提供了专业建议。从环境准备、Qt安装配置到VS2019集成设置,逐步指导开发者完成开发环境的搭建,并提供了常见问题的解决方案和高级优化技巧,帮助开发者高效进行Qt开发。

weixin_29243279的博客 511

Pseudoforest HDU - 3367(最大生成树+kruskal算法+并查集+判环)

In graph theory, a pseudoforest is an undirected graph in which every connected component has at most one cycle. The maximal pseudoforests of G are the pseudoforest subgraphs of G that are not contained within any larger pseudoforest of G. A pesudoforest i

Piink的博客 502

Python 爬虫实战:微信搜一搜内容深度爬取(含搜索结果解析与企业级架构设计)

在信息爆炸的时代,微信搜一搜已成为海量信息获取的重要入口。无论是个人知识探索,还是企业舆情监控,掌握微信搜一搜内容的深度爬取能力具有巨大价值。本文将从基础原理到企业级实现,全面解析微信搜一搜爬虫的开发过程。

yansideyucsdn的博客 2455

[noi39]子图

小w喜欢的图可以发现就是一棵森林(是不是很神奇,其实易证:如果有环那么环本身就不合法,如果没有环那么显然合法)。继续研究发现删边最小<=>选边最大<=>最大生成森林,kruskal跑一下即可。 1 #include<bits/stdc++.h> 2 using namespace std; 3 struct ji{ 4 ...

weixin_38168173的博客 76

基于AI大模型实现自然语言转SQL、SQL解释、SQL优化和SQL转换

随着大数据和人工智能技术的发展,数据分析和数据挖掘在各行各业中的应用越来越广泛。SQL(Structured Query Language)作为关系数据库的查询语言,是数据分析的重要工具。然而,SQL语言的复杂性和专业性使得许多非技术背景的用户难以直接使用,阻碍了数据的广泛利用。为了降低SQL的使用门槛,许多研究者和企业开始探索如何通过自然语言处理(NLP)技术,将自然语言转化为SQL查询语句,从而让用户可以通过自然语言与数据库进行交互。

AI天才研究院 2238

手把手教你学Simulink——基于Simulink的隔离型DC-DC全桥变换器移相控制建模示例

本文详细介绍了基于Simulink的全桥移相变换器(PSFB)建模与控制方法。首先分析了全桥移相拓扑在大功率应用中的优势,包括ZVS实现、高频化和小型化特点。随后给出了具体设计参数和移相控制策略,采用电压外环+移相角内环的双闭环控制架构。文章重点演示了Simulink建模步骤,包括主电路搭建、移相PWM生成和PI控制器设计,并通过满载稳态、负载阶跃和轻载测试三种场景验证了系统性能。最后总结了工程实践要点,提出自适应控制等扩展方向,强调移相控制通过精准时间管理实现高效能量转换的核心价值。

MHD0815的博客 261

生成树算法

最小生成树介绍一、prim算法二、Kruskal 算法 介绍 我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。 注意:只有连通图才有生成树,而对于非连通图,只存在生成森林(好多生成树!)。 图的形式不唯一,但是保证边权和最小!! 一、prim算法 基于邻接矩阵的算法,对于密集图更为方便,且复杂度达到O(N*N),且受到邻接矩阵特性的时间空间限制 记录当前在树上的所有点,并维护该树(联通块)对外界的所有边的权值dist [ x ] 增边:每.

qq_42852687的博客 3188

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【网络稳定性——最大生成森林+LCA】

【代码】【网络稳定性——最大生成树+LCA】

Kent的博客 947

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

POJ 3723 Conscription (kruskal最大生成森林)

Conscription Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8479   Accepted: 2959 Description Windy has a country, and he wants to build an army to protec

TaoSama's Microcosm 655

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Aizu 2224

Time Limit:8000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Practice Aizu 2224 Description Nicholas Y. Alford was a cat lover. He had a garden in a villag

Fate_O的专栏 855

最小生成树(森林):Prim算法与Kruskal算法 (以POJ1287为例)

Prim算法:Prim算法类似于Dijkstra算法,但又不尽相同。我们首先设一个只包含一个随机选取的结点v的集合T(T即为已加入最小生成树的点的集合)然后贪心地选取其他未加入集合中的点与T的距离最短的点即可,如此迭代这一过程,直到所有的点都已加入集合T,即得到了最小生成树。图示分析:https://www.61mon.com/index.php/archives/199/POJ1287-NETW...

qq_41287489的博客 2625

最大生成树|最大权森林

http://poj.org/problem?id=3723 题意:给定n个男生和m个女生的关系,各个关系具有一定的权值,然后要挑选出所有人,每个人的代价是10000,但挑选人的过程中这些权值就是可以用来减去费用,求cost的min #include<cstdio> #include<string> #include<iostream>...

weixin_30294295的博客 835

生成树和生成森林

1、无向图的生成树和生成森林 对于无向连通图,在图的深度优先遍历或广度优先遍历过程中经历的边的集合和 图中的所有顶点一起构成图的极小连通子图,就是一颗生成树(深度优先生成树、广度优先生成树)。 对非连通无向图,深度优先搜索遍历或广度优先搜索遍历,每个连通分量中的顶点集合遍历时走过的边一起构成若干颗生成树,这些连通分量的生成树组成非连通图的生成森林(深度优先生成森林、广度优先生成森林)。 深度

Unique-You的博客 1万+

图之深度优先生成森林

无向图的深度优先生成森林算法Java实现

suns的专栏 4826

poj 3723 Conscription 【最大生成树|最大权森林】

题目:poj 3723 Conscription 题意:要征兵n个男兵和m个女兵,每个花费10000元,但是如果已经征募的男士兵中有和将要征募的女士兵关系好的,那么可以减少花费,给出关系,求最小花费。 分析:这个题目初始一个是个二分图,以为可以从这里入手,但是这个题目这个性质没用。 初始花费没人10000,那么减去其中有关系的就是当前的花费。 要是花费最少,那么减去的最大即

大神养成中..... 5240

数据结构——图的连通性(生成树、最小生成树、生成森林)(Prim算法)(Kruskal算法)

1、求图的生成树(或生成森林)       生成树:是一个极小连通子图,它含有图中全部n个顶点,但只有n-1条边。       生成森林: 由若干棵生成树组成,含全部顶点,但构成这些树的边是最少的。       深度优先搜索生成树: 由深度优先搜索得到的生成树       广度优先搜索生成树: 由广度优先搜索得到的生成树       若对连通图进行遍历,得到的是图的生成树       ...

Joshua Lee的博客 2万+

Luogu 1967(货车运输)(最大生成森林+LCA)

传送门 题意:有 nn 座城市,编号从 11 到 nn ,城市之间有 mm 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。 题解:由于要装尽量多的货物,所以先用kruskal跑一个最大生成森林,然后再因为存在短板效应,所以在这些生成的树上跑倍增(可参考倍增求LCA),求出每条询问的路径上的最...

KGV093的博客 439

最小生成树(森林)

Prim算法/* * Prim求MST * 耗费矩阵cost[][],标号从0开始,0 ~ n-1 * 返回最小生成树的权值,返回-1表示原图不连通 */const int INF = 0x3f3f3f3f; const int MAXN = 110; bool vis[MAXN]; int lowc[MAXN];int Prim(int cost[][MAXN], int n) //0

逐梦者 4603

PKU-3723(Kruskal())

Conscription Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5981   Accepted: 2054 Description Windy has a country, and he wants to build an army to protec

李硕 955

poj 2377 最大生成树 最小生成树的变形

/* 题目大意:求最大生成树。 题目分析:转换一下思维,将最小改为最大就可以了,题目数据有重边,使用kruskal算法无影响, */ #include #include #include #include using namespace std; const int maxn=20002; int n,m,father[maxn],ans,sum; struct node {

天逸南爵的专栏 1060
上一篇: poj1654 Area
下一篇: hdu5625 Clarke and chemistry
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值