记录编号 406478 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016]公路修建 最终得分 100
用户昵称 Gravatar不需要黄桃 是否通过 通过
代码语言 C++ 运行时间 0.252 s
提交时间 2017-05-18 19:46:55 内存使用 0.96 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct kk
{
	int u,v;
	int wet;
} ed1[23000],ed2[23000];
int n,fath[30002],m,K;
void inii()
{
	for(int i=1;i<=n;i++)
		fath[i]=i;
}
int finn(int x)
{
	int r=x;
	while(r!=fath[r])
		r=fath[r];
	int j,k=x;
	while(k!=fath[k])
	{
		j=fath[k];
		fath[k]=r;
		k=j;
	}
	return r;
}
int comp(const kk &a,const kk &b)
{
	return a.wet<b.wet;
}
void uuin(int x,int y)
{
	int ix=finn(x),iy=finn(y);
	if(ix!=iy)
		fath[ix]=iy;
}
int main()
{
	freopen("hzoi_road.in","r",stdin);
	freopen("hzoi_road.out","w",stdout);
	cin>>n>>K>>m;inii();
	int pp=0,uu,vv,xxam=0;
	for(int j=1;j<=m-1;j++)
	{
		cin>>uu>>vv>>ed1[j].wet>>ed2[j].wet;
		ed1[j].u=uu;ed1[j].v=vv;ed2[j].u=uu;ed2[j].v=vv;
	}
	sort(ed1+1,ed1+m,comp);
	sort(ed2+1,ed2+m,comp);
	int ii=1;
	while(pp<K)
	{
		int qd=finn(ed1[ii].u),zd=finn(ed1[ii].v);
		if(qd!=zd)
		{
			uuin(ed1[ii].u,ed1[ii].v);
			if(xxam<ed1[ii].wet)
				xxam=ed1[ii].wet;
			pp++;
		}
		ii++;
	}
	ii=1;
	while(pp<n-1)
	{
		int qd=finn(ed2[ii].u),zd=finn(ed2[ii].v);
		if(qd!=zd)
		{
			uuin(ed2[ii].u,ed2[ii].v);
			if(xxam<ed2[ii].wet)
				xxam=ed2[ii].wet;
			pp++;
		}
		ii++;
	}
	cout<<xxam;
	return 0;
}