(파일 IO) : 입력 : road.in 출력 : road.out
시간 제한 : 1000 MS 공간 제약 : 13만1천72킬로바이트의 특정 제한
고토 ProblemSet
제목 설명
데모 기능을 갖춘 양 마을 검사 한 후 검사 팀은 학교 안전에 어린 양에 영향을 미칠 것이다, 도로 양 마을, 황폐 한 도로를 재 구축해야 할 필요성을 느꼈다.
마을 건설 팀이, 거리를 측정 건설 프로그램을 계획하고 시작 구성, 그것은 여러 건물 사이의 빌드 도로 실행 가능한 옵션, 총되었습니다
건물 및
조각 옵션도. 이 도로는 보장 할 것
건물에 접속된다.
마지막 프로그램은, 양 마을은 세계에서 가장 고급스러운 모든 대리석 도로를 구축하고자, 도로는 원활한 방식으로, 양방향 트래픽 및 한 조각이 될 수 있습니다. 이 설계 요구 사항을 달성하기 위해, 자체 내장 된 대리석 공장으로 필요하다!
난이도 대리석의 요구가 대리석의 생산의 최대 길이에 따라 설계되어야 함을 공장 제작. 대리석 공장은 설계 한계를 초과하지 않는 길이를 생성 할 수 있습니다. 길이 예를 들어, 디자인
식물 제조 할 수
대리석 길이 등이나 길이를 생성 할 수 없습니다
대리석.
양 마을 예산이 제한되어, 당신은 가능한 한 작게 식물의 디자인 크기를 만드는 계획을 도로 체계를 도울 수 있기를 바랍니다, 당신은 대리석 건물이 마을 양 모두에 연결할 수 있습니다 생성 할 수 있음을 보장 할 수 있습니다. 최소한의 디자인 크기의 식물의 값입니다.
입력
첫 번째 줄에 두 정수를
과
마을 양에서 건물의 수를 나타냅니다, M은 도로의 수를 구축 할 수있다.
다음
라인, 각 라인 세 개의 정수
합
, 건물로부터 발현
, 건물
, 길이를 구축 할 수 있습니다
도로.
건물에서 그 번호를 참고
에
두 건물 사이의 도로의 개수 일 수있다.
출력
최소 디자인 크기 대리석 공장 출력.
샘플 입력
. 3. 3
. 1 2 100
2 3 101
. 1 3 99
샘플 출력
(100)
데이터 범위 제한
데이터 %
.
데이터 %
,
.
팁
길이의 건설 등으로
에
, 및
에
도로, 그것은 할 수 있습니다
서로 통신 번째 빌딩 단지 최대
구조 설계 만 스케일
대리석 공장, 길이에서 생산 될 수있다
및
대리석.
아이디어를 해결
최소 스패닝 트리 크루스 칼 머리, 축적 경로를 최대 값을 선택하면 오른쪽 가장자리가된다. (I는 이산 세트를 사용)
코드
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,m,k,fa[2010],xx,yy,ans;
struct c{
int x,y,z;
}a[10010];
bool cmp(const c&l,const c&r)
{
return l.z<r.z;
}
int father(int h)
{
while(h!=fa[h])
h=fa[h];
return h;
}
int main(){
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
sort(a+1,a+m+1,cmp);
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=m;i++)
{
xx=father(a[i].x);
yy=father(a[i].y);
if(xx!=yy)
{
ans=max(ans,a[i].z);
fa[xx]=yy;
}
}
printf("%d",ans);
}