标签:电设 c++ editable 学校 for others 条件 设备 测试数据
1 4 6 1 2 10 2 3 10 3 1 10 1 4 1 2 4 1 3 4 1 1 3 5 6
4
与一道省赛题目类似,走了弯路,这个要求只能有一个结点与虚拟结点连接,所以先对n个点求出一个MST再找出最小的虚拟节点与这个树的权值,加上这个权值就是答案!
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊笨死了啊
#include<bits/stdc++.h>
using namespace std;
#define N 205005
int u[N],v[N],w[N],r[N];
bool cmp(int i,int j){return w[i]<w[j];}
int n,m;
int f[505];
int getf(int v){return f[v]==v?v:f[v]=getf(f[v]);}
int main()
{
int t,n,m,i,j,k;
int a,b,c;
cin>>t/*=read()*/;
while(t--){
cin>>n>>m;
for(i=0;i<=n;++i) f[i]=i;
for(i=1;i<=m;++i) {r[i]=i;
cin>>u[i]/*=read(),*/>>v[i]/*=read(),*/>>w[i]/*=read()*/;
}
sort(r+1,r+m+1,cmp);
int sumn=0,Count=0;
for(i=1;i<=m&&Count!=n-1;++i){
int e=r[i],x=getf(u[e]),y=getf(v[e]);
if(x!=y){
Count++;
f[y]=x;
sumn+=w[e];
}
}int ans=999999999,x;
for(i=1;i<=n;++i){cin>>x;ans=min(x,ans);}
cout<<sumn+ans<<endl;
}
return 0;
}
标签:电设 c++ editable 学校 for others 条件 设备 测试数据
原文地址:http://www.cnblogs.com/zzqc/p/6724066.html