其他分享
首页 > 其他分享> > P1547 Out of Hay 题解

P1547 Out of Hay 题解

作者:互联网

Content

\(\text{Bessie}\)打算调查\(N\)个农场的干草储备情况,她将从1号农场出发,顺着连接农场的\(M\)条边调查,每条边的长度为\(a_i\)。\(\text{Bessie}\)想知道,这个农场的地图中最小生成树中最长边的长度。

数据范围:\(2\leqslant N\leqslant2000,1\leqslant M\leqslant10000,a_i\leqslant10^9\)

Solution

最小生成树的模板题,刚学最小生成树的新手可利用此题加强巩固。

其实这道题目在\(POJ\)上有一模一样的题,叫做\(\text{Highways(POJ2485)}\)。它们两道题目都是让你求无向图中的最小生成树中最长边的长度。还有一个在洛谷上的\(\text{P1111}\),实质上也和本题一样。

很简单,我们在\(\text{P3366}\)里头是不是让你求最小生成树的边权和?还记得\(\text{Kruskal}\)版本的核心代码是什么吗?

for(int i = 1; i <= m; ++i) {
		int x = g(e[i].u), y = g(e[i].v);
		if(x != y) {
			f[x] = y;
			ans += e[i].w;
			cnt++;
		}
		if(cnt == n - 1)	break;
	}

那么这道题目很简单,就在这上面的\(\text{ans += e[i].w}\)的地方改动一下。这里是用的求和操作是不是?那么就把它改成取\(\max\)操作就可以了。

就像这样:

for(int i = 1; i <= m; ++i) {
		int x = g(e[i].u), y = g(e[i].v);
		if(x != y) {
			f[x] = y;
			ans = max(ans, e[i].w);	//这里改动!
			cnt++;
		}
		if(cnt == n - 1)	break;
	}

把它改完,交上去,就过了!

是不是很简单?

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int n, m, x, y, z, f[2000010], line, side, sum;
inline int read () {
	char ch = getchar();
	int x = 0, f = 1;
	while (ch < '0' || ch >'9') {
		if(ch == '-')
			f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9')
		x = x * 10 + (ch ^ 48), ch = getchar();
	return x * f;
}

struct Point {
	int u, v, w;
} po[2000010];

bool sorting_cmp(const Point &a,const Point &b) {
	return a.w < b.w;
}
 
inline int find(int x) {
	if(f[x] == 0)	return x;
	else			return f[x] = find(f[x]);
}

int main() {
	n = read(), m = read();
	for(int i = 1; i <= m; ++i) {
		x = read(), y = read(), z = read();
		po[line].u = x, po[line].v = y, po[line].w = z;
		line++;
	}
	sort(po, po + line, sorting_cmp);
	for(int i = 0; i < line; ++i) {
		int t = po[i].w,
		ufa = find(po[i].u), vfa = find(po[i].v);
		if(ufa != vfa) {
			sum = max(sum, t);
			f[ufa] = vfa;
			line++;
		}
		if(line == n - 1)	break;
	}
	cout << sum;
	return 0;
}

标签:ch,int,题解,最小,生成,P1547,Hay,text,include
来源: https://www.cnblogs.com/Eason-AC/p/15725216.html