hdu1233
2705 단어 최 단 로
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 33305 Accepted Submission(s): 15024
Problem Description
모 성에 서 마을 의 교통 상황 을 조사 하여 얻 은 통계표 에는 임의의 두 마을 간 의 거리 가 열거 되 어 있다.성 정부의'원활 한 공사'목 표 는 성 전체의 어느 두 마을 간 에 도 도로 교통 을 실현 할 수 있 도록 하 는 것 이다.가장 작은 도로 의 총 길 이 를 계산 해 주세요.
Input
테스트 입력 은 약간의 테스트 용례 를 포함한다.각 테스트 용례 의 첫 번 째 줄 은 마을 수 N(<100)을 드 립 니 다.이 어 N(N-1)/2 줄 은 마을 간 의 거리 에 대응 하고 각 줄 은 두 마을 의 번호 와 이 두 마을 간 의 거 리 를 나타 낸다.간단하게 말하자면,마을 은 1 부터 N 까지 번 호 를 매 긴 다.
N 이 0 일 때 입력 이 끝나 면 이 용례 는 처리 되 지 않 습 니 다.
Output
각 테스트 사례 에 대해 서 는 1 줄 에서 가장 작은 도로 총 길 이 를 출력 한다.
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5
Hint
Hint
Huge input, scanf is recommended.
Source
절 대 컴퓨터 대학원 재시험
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int father[110],sum;
struct node
{
int s,d,f;
} p[5010];
bool cmp(const node &a,const node &b)
{
return a.f<b.f;
}
void set(int n)
{
for (int i=1; i<=n; i++)
father[i]=i;
}
int find(int a)
{
if (father[a]==a)
return a;
return father[a]=find(father[a]);
}
void Union(int x,int y,int z)
{
x=find(x);
y=find(y);
if (x!=y)
{
sum+=z;
father[x]=y;
}
}
int main ()
{
int n;
while (scanf ("%d",&n)==1&&n)
{
sum=0;
set(n);
for (int i=1; i<=n*(n-1)/2; i++)
scanf ("%d%d%d",&p[i].s,&p[i].d,&p[i].f);
//cin>>p[i].s>>p[i].d>>p[i].f;
sort(p+1,p+n*(n-1)/2+1,cmp);
for (int i=1; i<=n*(n-1)/2; i++)
{
Union(p[i].s,p[i].d,p[i].f);
}
printf ("%d
",sum);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1233 또는 원활 한 공정 최소 생 성 트 리 (prim 알고리즘 + kruskal 알고리즘)그럼 이 연결 서브 맵 은 G 의 최소 생 성 트 리 입 니 다.최소 생 성 트 리 를 구 하 는 흔 한 알고리즘 은 Prim 알고리즘 입 니 다. 욕심 전략 을 사용 하기 때문에 집합 S 에 새로운 정점 을 추가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.