【题解】洛谷 P2330 [SCOI2005] 繁忙的都市 [生成树]

P2330 SCOI2005 繁忙的都市 - 洛谷 (luogu.com.cn)

做几天题终于给我做到保底了。


题意误导人,什么改造的道路尽量少,要联通不就是生成树吗,就只能是 n - 1 条边。

然后这就是最小生成树板题,不会看这里

虽然最小生成树求的是边权和最小,但贪心算法可以保证最大边权也最小。

毕竟是先排序再从小到大选,选到联通就停手。

(题解还二分,不要看到 "最小最大" / "最大最小" 就二分!有些性质可以通过贪心顺便搞的)

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N = 8010;

struct edge {
	int x, y, c;
} a[N];

bool cmp(edge na, edge nb) {
	return na.c < nb.c;
}

int fa[310];
int findfa(int x) {
	if (fa[x] == x) {
		return fa[x];
	}
	return fa[x] = findfa(fa[x]);
}

int main () {
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i ++) {
		fa[i] = i;
	}
	for (int i = 1; i <= m; i ++) {
		cin >> a[i].x >> a[i].y >> a[i].c;
	}
	sort(a + 1, a + m + 1, cmp);
	
	int sum = 0;
	for (int i = 1; i <= m; i ++) {
		int tx = findfa(a[i].x), ty = findfa(a[i].y);
		if (tx != ty) {
			sum ++;
			fa[tx] = ty;
		}
		if (sum == n - 1) {
			cout << n - 1 << " " << a[i].c << "\n";
			break;
		}
	}
	
	return 0;
} 
相关推荐
致Great1 天前
DeepSeek Harness插件开发实战教程:我让它自己写了一个 arXiv 搜索插件
算法
ShineWinsu1 天前
对于C++:auto_ptr、unique_ptr、shared_ptr的模拟实现
c++·面试·笔试·智能指针·unique_ptr·shared_ptr·auto_ptr
XLYcmy1 天前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
反转180度1 天前
Qt 6 + C++17 实现 SFTP 批量部署:工业设备运维工具实战解析
运维·c++·qt
罗西的思考1 天前
【Agent OS / AIOS】AOHP 深度解读:当 OS 开始为 Agent 而设计
人工智能·算法·机器学习
民乐团扒谱机1 天前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
码匠许师傅1 天前
【C++ 面试真题】聊聊 C++ 的多继承与虚继承
开发语言·c++·面试
Nil2081 天前
leetcode 160相交链表
算法·leetcode·链表
迷途之人不知返1 天前
算法系列2:滑动窗口
算法
有点。1 天前
C++认识数
开发语言·c++