HDU 원활 공사 & & 원활 공사 (차 트 법)
5223 단어 c + +도 론HDU 플랫폼 연습 문제
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 56786 Accepted Submission(s): 30342
Problem Description
모 성 은 도시 의 교통 상황 을 조사 하여 기 존의 도시 도로 통계 표를 얻 었 고 표 에는 모든 도로 가 직접 연 결 된 도시 가 열거 되 어 있다.성 정부의 '원활 한 공사' 목 표 는 성 전체의 어느 두 도시 간 에 도 교통 을 실현 할 수 있 도록 하 는 것 이다.-- 최소한 몇 개의 도 로 를 더 건설 해 야 하나.
Input
테스트 입력 은 약간의 테스트 용례 를 포함한다.각 테스트 사례 의 첫 번 째 줄 은 두 개의 정 수 를 제시 하 는데 그것 이 바로 도시 수량 N (< 1000) 과 도로 수량 M 이다.그 다음 에 M 줄 은 M 개의 도로 에 대응 하고 각 줄 은 한 쌍 의 정 수 를 제시 하 는데 각각 이 도로 가 직접 연 결 된 두 도시 의 번호 이다.간단하게 말하자면, 도 시 는 1 부터 N 까지 번호 가 있다.
주의: 두 도시 사이 에 여러 개의 길이 통 할 수 있 습 니 다. 즉,
3 3
1 2
1 2
2 1
이런 입력 도 합법적이다
N 이 0 일 때 입력 이 끝나 면 이 용례 는 처리 되 지 않 습 니 다.
Output
각 테스트 사례 에 대해 서 는 1 줄 에서 최소 건설 해 야 할 도로 수 를 출력 한다.
Sample Input
4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
Sample Output
1 0 2 998Huge input, scanf is recommended.HintHint#include
using namespace std; const int maxn=1010; int s[maxn]; int find(int x) { if(s[x]==-1) return x; return s[x]=find(s[x]); } void join(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) s[fx]=fy; } int main() { int n,m,a,b; while(scanf("%d",&n),n) { scanf("%d",&m); for(int i=1;i<=n;i++) s[i]=-1; for(int i=1;i<=m;i++) { scanf("%d %d",&a,&b); join(a,b); } int sum=0; for(int i=1;i<=n;i++) if(s[i]==-1) sum++; printf("%d
",sum-1); } return 0; }
아니면 원활 한 공사?
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 48610 Accepted Submission(s): 22164
Problem Description
모 성에 서 마을 의 교통 상황 을 조사 하여 얻 은 통계표 에는 임의의 두 마을 간 의 거리 가 열거 되 어 있다.성 정부의 '원활 한 공사' 목 표 는 성 전체의 어느 두 마을 간 에 도 도로 교통 을 실현 할 수 있 도록 하 는 것 이다.가장 작은 도로 의 총 길 이 를 계산 해 주세요.
Input
테스트 입력 은 약간의 테스트 용례 를 포함한다.각 테스트 용례 의 첫 번 째 줄 은 마을 수 N (< 100) 을 드 립 니 다.이 어 N (N - 1) / 2 줄 은 마을 간 의 거리 에 대응 하고 각 줄 은 두 마을 의 번호 와 이 두 마을 간 의 거 리 를 나타 낸다.간단하게 말하자면, 마을 은 1 부터 N 까지 번 호 를 매 긴 다.
N 이 0 일 때 입력 이 끝나 면 이 용례 는 처리 되 지 않 습 니 다.
Output
각 테스트 사례 에 대해 서 는 1 줄 에서 가장 작은 도로 총 길 이 를 출력 한다.
Sample Input3 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 Output3 5Huge input, scanf is recommended.HintHint#include
#include using namespace std; const int maxn=115; int per[maxn],n,t; struct node { int x; int y; int dis; }s[5000]; void init() { for(int i=1;i<=n;i++) per[i]=i; } int find(int t) { if(per[t]==t) return t; return per[t]=find(per[t]); } int cmp(node x,node y) { return x.dis fy) { per[fx]=fy; } else { per[fy]=fx; } } } int main() { while(scanf("%d",&n),n) { t=n*(n-1)/2; for(int i=0;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.