这么就wa了
查看原帖
这么就wa了
326254
LonginusMonkey楼主2023/11/5 14:50

二分+kuskal

#include<bits/stdc++.h>
#define per(i,l,r) for(int i(r), i##end(l); i>=i##end; --i)
#define rep(i,l,r) for(int i(l), i##end(r); i<=i##end; ++i)
#define ll long long
#define pb push_back
using namespace std;
const int maxn = 8000+10; int n, m, fa[maxn];
struct node{int from, to, w;}edge[maxn];
bool cmp(node x, node y) {return x.w < y.w;}
int find(int index) {if(fa[index]==index)return index; return fa[index] = find(fa[index]);}
int merge(int x, int y) {
	int fax = find(x), fay = find(y);
	return fax = fa[fay];
}
bool check(int mid, int tot = 0) {
	rep(i, 1, n) fa[i] = i;
	rep(i, 1, m) {
		if(tot == n-1 || edge[i].w > mid) break;
		(find(edge[i].from != find(edge[i].to))) && (merge(edge[i].from, edge[i].to), tot++);
	}
	return tot == (n-1);
}
int main() {
	cin >> n >> m;
	rep(i, 1, m) cin >> edge[i].from >> edge[i].to >> edge[i].w;
	sort(edge+1, edge+1+m, cmp);
	int l = 0, r = 1e9, ans = 1e9, mid;
	while((mid = l + r >> 1, l <= r)) check(mid) && (r=mid-1, ans=mid) || (l=mid+1);
	cout << n-1 << " " << ans;
	return 0;
}
2023/11/5 14:50
加载中...