题目:
输入输出样例
input:
4 3
1 2 4
2 3 3
3 1 1
3
1 3
1 4
1 3
output:
3
-1
3
思路:
类似最大生成树
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#define maxn 111111
using namespace std;
int n,m,k,u,v,w;
int fa[maxn];
struct edge
{
int x,y,z;
bool operator<(const edge &e1)const
{
return z<e1.z;
}
}e[maxn];
int getfa(int x)
{
return (x==fa[x])?x:(fa[x]=getfa(fa[x]));
}
void merge(int x,int y)
{
int xx=getfa(x),yy=getfa(y);
if (xx==yy) return;
fa[xx]=yy;
}
double x[maxn],y[maxn];
int main()
{
cin>>n>>m>>k;
int ans=0,cnt=0;
for (int i=1;i<=n;i++) fa[i]=i;
for (int i=1;i<=m;i++)
{
cin>>u>>v>>w;
e[++cnt]={u,v,w};
}
sort(e+1,e+cnt+1);
int cntt=0;
for(int i=cnt;i>=1;i--)
{
if(getfa(e[i].x)!=getfa(e[i].y))
{
merge(e[i].x,e[i].y);
ans+=e[i].z;
cntt++;
}
if(cntt==k) break;
}
cout<<ans<<endl;
return 0;
}