文章

10

粉丝

99

获赞

5

访问

7.3k

头像
继续畅通工程 题解:稍微修改1312
P1311 浙江大学机试题
发布于2024年3月18日 18:06
阅读数 647

#include <bits/stdc++.h>
using namespace std;

const int maxn=105;
int fa[maxn];

struct node{
	int u,v,w,m;
}edge[maxn*maxn];

int cmp(node a,node b){
	if(a.m!=b.m) return a.m>b.m;
	else return a.w<b.w;
}

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

int main(){
	int N;
	while(scanf("%d",&N)!=EOF){
		if(N==0) break;
		for(int i=0;i<N*(N-1)/2;i++){
			scanf("%d%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w,&edge[i].m);
		}
		for(int i=1;i<=N;i++){
			fa[i]=i;
		}
		sort(edge,edge+N*(N-1)/2,cmp);
		int sum=0;
		for(int i=0;i<N*(N-1)/2;i++){
			int fx=find(edge[i].u);
			int fy=find(edge[i].v);
			if(fx!=fy){
				fa[fx]=fy;
				if(edge[i].m==0) sum+=edge[i].w;//相较于1312只修改此处 和cmp 
			}
	}
			printf("%d\n",sum);
}
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发