반응형
https://www.acmicpc.net/problem/3780
3780번: 네트워크 연결
입력은 여러 개의 테스트케이스로 주어진다. 입력의 첫 번째 줄에는 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스에는 기업의 수를 나타내는 N(4 ≤ N ≤ 20,000)이 주어진다. 다음은 몇
www.acmicpc.net
1.문제설명
Union & Find, dis-joint set을 이용하는 문제입니다.
재귀를 잘 이용해서 거리를 잘 구해야 풀 수 있습니다.
부가적으로 제가 50%에서 계속 틀렸는데
거리를 구할 때 (i-j)%1000 이고
답을 구할 때 %1000을 해주면 안됩니다.
답은 (i-j)%1000을 모두 합한 값입니다
즉 1000을 넘어갈 수 도 있기 때문에 답에도 %1000을 해버리면 틀립니다.
2.문제풀이코드 C++
#include <bits/stdc++.h>
using namespace std;
int d[20003];
int unf[20003];
int Find(int x) {
if (unf[x] < 0) return x;
int idx = Find(unf[x]);
d[x] += d[unf[x]];
return unf[x] = idx;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
for (int T = 0; T < t; T++) {
memset(unf, -1, sizeof(unf));
memset(d, 0, sizeof(d));
int n;
cin >> n;
char c;
while (1) {
cin >> c;
if (c == 'E') {
int k;
cin >> k;
Find(k);
cout << d[k] << '\n';
}
else if (c == 'I') {
int a, b;
cin >> a >> b;
unf[a] = b;
d[a] = (abs(a - b) % 1000);
}
else if (c == 'O') {
break;
}
}
}
return 0;
}

반응형
'Algorithm > problem' 카테고리의 다른 글
백준 14499번 : 주사위 굴리기 (0) | 2022.03.05 |
---|---|
백준 10971번 : 외판원 순회 2 - 비트마스킹 BFS C++ (0) | 2022.03.04 |
백준 17398번 : 통신망 분할 - Union & Find dis-joint set 알고리즘 C++ (0) | 2022.03.02 |
백준 15459번 : Haybale Feast - Union&Find dis-joint set C++ 문제풀이 (0) | 2022.03.02 |
백준 10775번 : 공항 - dis-joint set , Union&Find C++ (0) | 2022.03.01 |