hdu 컴퓨터 대학 대학생 프로 그래 밍 경기 (2015 '11) 1007 유채꽃 왕국
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1720 Accepted Submission(s): 447
Problem Description
프로 그래 밍 경연 대 회 를 앞 두 고 학교 ACM 합숙 훈련 팀 의 주축 으로서 샤 오 밍 은 열심히 훈련 해 왔 다.오늘 은 날씨 가 좋 고 코치 님 도 기분 이 아주 좋 습 니 다. 이례 적 으로 선수 들 에 게 하루 를 쉬 게 해 주 었 습 니 다. 샤 오 밍 은 자신의 당 나 귀 를 타고 교외 로 나 가 답청 을 했 습 니 다.
성 을 나 간 지 얼마 되 지 않 아 샤 오 밍 은 커 다란 유채꽃 을 보고 눈앞 의 아름 다운 경치 의 유혹 을 참 지 못 하고 돌아 들 어 갔다. 누가 생각 했 겠 는가? 이 절 개 는 유채꽃 왕국 에 잘못 들 어 갔다!
유채꽃 왕국 에는 유채꽃 요정 들 이 많이 살 고 있 는데, 이것 은 피 보 나치 수열 을 특히 사랑 하 는 생물 이다.이 나라 에는 요정 한 마리 가 한 가족 에 속한다.엘 프 가 태 어 났 을 때, 몸 에 코드 가 찍 혀 있 는데, 이 엘 프 의 능력 치 를 나타 낸다. 만약 이 능력 치가 피 보 나치 수열 에 존재 한다 면, 그 는 자신 이 있 는 가족 에 게 약간의 위신 을 더 해 줄 것 이다.샤 오 밍 은 요정 들 과 이 야 기 를 나 누 며 모든 요정 들 의 관 계 를 알 게 되 었 다.
지금 샤 오 밍 은 유채꽃 왕국 에서 가장 명망 이 높 은 가문 의 위상 이 얼마 인지 알 고 싶 어 합 니 다. 그 를 도와 주 시 겠 습 니까?샤 오 밍 은 요정 들 사이 의 관계 네트워크 를 알려 줄 것 이다. 전체 관계 네트워크 가 너무 커서 샤 오 밍 이 그 중 일 부 를 반복 적 으로 소개 할 가능성 이 높다.
Input
여러 그룹 을 포함 하 는 데 이 터 를 입력 하 십시오.
각 조 의 데이터 첫 줄 은 두 개의 정수 n (1 < = n < = 1000), m (1 < = m < = 5000) 을 포함 하고 유채꽃 왕국의 엘 프 수량 과 엘 프 간 의 관계 조 수 를 나타 낸다.
두 번 째 줄 은 n 개의 정 수 를 포함 하고 엘 프 들 의 능력 치 k (1 < = k < = 100000000) 를 나타 낸다.
이어서 m 줄 이 있 습 니 다. 줄 마다 두 개의 다른 정수 u, v (1 < = u, v < = n) 가 있 습 니 다. 엘 프 u 와 엘 프 v 는 같은 가족 에 속 합 니 다.
Output
위망 치가 가장 큰 가문 의 위망 치 를 출력 하 십시오. 각 그룹의 데 이 터 는 한 줄 의 출력 에 대응 합 니 다.
Sample Input
2 1
1 4
1 2
Sample Output
1
피 보 나치 수열 의 성장 속 도 는 매우 빨 라 서 45 번 째 때 이미 100000000 을 넘 었 다. 45 자리 배열 만 열 면 차이 가 많 지 않다. 그 다음 에 이 작은 배열 을 쓸 어 피 보 나치 수 인지 아 닌 지 판단 하면 된다.
u 와 v 를 같은 가족 에 게 합병 하여 사용 하고 집합 을 찾 게 합 니 다. 마지막 으로 뿌리 노드 를 쓸 어 집합 위망 의 최대 치 를 찾 습 니 다.
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <limits>
#include <algorithm>
using namespace std;
struct node {
int w; //
int p; //
};
const int maxn = 45;
int a[50];
node f[1005];
void fbb() { //
a[1] = a[2] = 1;
for (int i = 3; i <= maxn; i++) {
a[i] = a[i - 1] + a[i - 2];
}
}
int getf(int v) { // v
if (f[v].p == v) {
return v;
}
else {
f[v].p = getf(f[v].p); //
return f[v].p;
}
}
void Merge(int u, int v) { // u, v
int t1 = getf(u);
int t2 = getf(v);
if (t1 != t2) { //u, v
f[t2].p = t1; // v u , u v
f[t1].w += f[t2].w; // u ,
}
}
int main()
{
int n, m;
fbb();
while (~scanf("%d%d", &n, &m)) {
for (int i = 1; i <= n; i++) {
f[i].p = i; //
f[i].w = 0;
int t;
scanf("%d", &t);
for (int j = 1; j <= maxn; j++) {
if (t == a[j]) {
f[i].w = 1; //
break;
}
}
}
for (int i = 1; i <= m; i++) {
int u, v;
scanf("%d%d", &u, &v);
Merge(u, v); // u,v
}
int maxn = numeric_limits<int>::min();
for (int i = 1; i <= n; i++) {
if (getf(i) == i) { // , maxn
maxn = max(maxn, f[i].w);
}
}
printf("%d
", maxn);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 구조 학습 노트 1 - 링크 반전 (재 귀 와 비 재 귀)최근 에 데이터 구 조 를 배우 고 필 기 를 했 습 니 다. 생각 이 많 습 니 다. 다음 과 같 습 니 다. 재 귀적 사용 안 함: 재 귀적 사용: 소스 코드 는 링크 반전 - 데이터 구조 참조 박문 에서 유래 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.