社区讨论

非递归求法不行吗?

P1111修复公路参与者 5已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo7zlsf0
此快照首次捕获于
2023/10/27 10:21
2 年前
此快照最后确认于
2023/10/27 10:21
2 年前
查看原帖
RT,下是10分代码
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=200000;
int n,m,f[N];
struct road {
	int from,to;
	int time;
	bool operator<(const road r)const {
		return time<r.time;
	}
} r[N];
int find(int x) {
	int r=x;
	if(r!=f[r]) {
		r=f[r];
	}
	while(x!=f[x]) {
		int z=x;
		x=f[x];
		f[z]=r;
	}
	return r;
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		f[i]=i;
	for(int i=1; i<=m; i++)
		cin>>r[i].from>>r[i].to>>r[i].time;
	sort(r+1,r+m+1);
	for(int i=1; i<=m; i++) {
		int x=find(r[i].from),y=find(r[i].to);
		if(x!=y) f[x]=y,n--;
		if(n==1){
			cout<<r[i].time;
			return 0;
		}
	}
	cout<<-1;
	return 0;
}
改成这个就AC了
CPP
int find(int x){return f[x]==x?x:(f[x]=find(f[x]));}

回复

5 条回复,欢迎继续交流。

正在加载回复...