文章
10
粉丝
99
获赞
5
访问
7.3k
#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);
}
}
登录后发布评论
暂无评论,来抢沙发