题解 | #畅通工程#

畅通工程

https://www.nowcoder.com/practice/23c9fe571c1346bb91fdffea8a0b195f

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int MAXN = 101;
int father[MAXN];
int height[MAXN];
struct Edge{
	int m1, m2;
	int value;
};
bool comp(Edge rhs, Edge lhs){
	return rhs.value < lhs.value;
}
void Initial(int n){
	for (int i = 0; i <= n; i++){
		father[i] = i;
		height[i] = 0;
	}
}
int Find(int x){
	if (x != father[x]){
		father[x] = Find(father[x]);
	}
	return father[x];
}
void Union(int x, int y){
	x = Find(x);
	y = Find(y);
	if (x != y){
		if (height[x] < height[y]){
			father[x] = y;
		}
		else if (height[y] < height[x]){
			father[y] = x;
		}
		else{
			father[y] = x;
			height[x]++;
		}
	}
	return;
}
int main(){
	int n, m;
	while (scanf("%d%d", &n,&m) != EOF){
		if (n == 0){
			break;
		}
		Initial(m);
		int answer = 0;
		Edge edge[101];
		for (int i = 0; i < n; i++){
			scanf("%d%d%d", &edge[i].m1, &edge[i].m2, &edge[i].value);
		}
		sort(edge, edge + n, comp);
		for (int i = 0; i < n; i++){
			if (Find(edge[i].m1) != Find(edge[i].m2)){
				answer += edge[i].value;
				Union(edge[i].m1, edge[i].m2);
			}
		}
		int i = 2;
		for (; i <= m; i++){
			if (Find(i) != Find(1)){
				printf("?\n");
				break;
			}
		}
		if (i == m+1){
			printf("%d\n", answer);
		}
	}
}

全部评论

相关推荐

01-23 14:54
同济大学 Java
热爱敲代码的程序媛:给你提几点【专业技能】这个模块里面可优化的地方:1.【具备JVM调优经验】可以去b站上搜一下JVM调优的视频,估计一两个小时凭你的学习能力就能掌握JVM调优的实践方面的技能。2.【MySql优化】MySql这一栏,你去b站或者找个博客看看MySql优化,学一下,如果你本身比较熟悉MySql语句的话,那基本半天时间凭你的学习能力MySql语句优化方面的技能你也能掌握个差不多。以上1,2两点主要是因为我看你专业技能大部分都说的是偏理论,没有写应用。再就是最后,你结合你的项目,想一想你的项目中哪些sql语句是可以用MySql优化的,到时候你面试的时候也好结合着说一下。
点赞 评论 收藏
分享
MingoTree:看不出你你的技术栈,想找什么工作,然后课设项目别写上去了,自我评价删了,前后端你想好你要干啥,这种简历投上去秒挂的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务