文章
25
粉丝
0
获赞
27
访问
1.4k
#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
struct edge{
int u,v,w;
}edges[maxn*maxn];
bool compare(edge a,edge b){
return a.w<b.w;
}
int fa[maxn];
int find(int x){
if(x==fa[x]) return x;
fa[x]=find(fa[x]);
return fa[x];
}
int n,m,t;
int main(){
while(cin>>n&&n!=0){
m=n*(n-1)/2;
int sum=0;
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=0;i<m;i++){
cin>>edges[i].u>>edges[i].v>>edges[i].w>>t;
if(t==1)
edges[i].w=0;
}
sort(edges,edges+m,compare);
for(int i=0;i<m;i++){
int fx=find(edges[i].u);
int fy=find(edges[i].v);
if(fx!=fy){
fa[fy]=fx;
sum+=edges[i].w;
}
}
cout<<sum<<endl;
}
}
登录后发布评论
暂无评论,来抢沙发