记录编号 313266 评测结果 AAAAAAAAAA
题目名称 口袋的天空 最终得分 100
用户昵称 Gravatarkxxy 是否通过 通过
代码语言 C++ 运行时间 0.056 s
提交时间 2016-09-28 21:12:40 内存使用 0.47 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=10010;
struct edge
{
	int from,to,val;
}e[maxn];
int n,m,k,x,y,l;
int f[maxn];
int tot=0;
inline bool cmp(edge a,edge b)
{
	return a.val<b.val;
}
inline void csh()
{
	for(int i=1;i<=n;i++)
		f[i]=i;
}
inline int find(int x)
{
	if(x==f[x])
		return x;
	return f[x]=find(f[x]);
}
inline void merge(int x,int y)
{
	int f1=find(x);
	int f2=find(y);
	f[f1]=f2;
}
int main()
{
	freopen("cotton.in","r",stdin);
	freopen("cotton.out","w",stdout);
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++)
	{
		cin>>x>>y>>l;
		e[i]=(edge){x,y,l};
	}
	sort(e+1,e+m+1,cmp);
	csh();
	int zz=0;
	for(int i=1;i<=m;i++)
	{
		if(find(e[i].from)!=find(e[i].to))
		{
			zz++;
			merge(e[i].from,e[i].to);
			tot+=e[i].val;
		}
		if(zz==n-k)
			break;
	}
	if(zz!=n-k)
	{
		cout<<"No Answer"<<endl;
		return 0;
	}
	cout<<tot<<endl;
	return 0;
}