백준 1876여행 유니온 파인드 질문있습니다.
241
134 asked
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define ll long long
#define endl "\n"
void merge(int a, int b);
int find(int a);
vector<int> parent;
vector<int> paths;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m;
cin >> n;
cin >> m;
parent.resize(n + 1);
for (int i = 0; i <= n; ++i)
{
parent[i] = i;
}
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
{
int v;
cin >> v;
if (v == 1)
{
merge(i, j);
}
}
}
for (int i = 1; i <= n; ++i)
{
int n;
cin >> n;
paths.push_back(n);
}
int prevPath = find(paths[0]);
for (int path : paths)
{
int curPath = find(path);
if (curPath != prevPath)
{
cout << "NO";
return 0;
}
prevPath = curPath;
}
cout << "YES";
return 0;
}
void merge(int a, int b)
{
a = find(a);
b = find(b);
if (a != b)
parent[b] = a;
}
int find(int a)
{
if (a == parent[a])
return a;
return parent[a] = find(parent[a]);
}
왜맞틀인거같은 느낌이 듭니다.
책에 있는 내용 분석해서 이해는 하였는데 제가 짠 코드가 왜 틀린것인지 모르겠습니다.
의심되는 부분은 처음에 merge하는 for문인거같은데
책처럼 인접리스트를 사용하지 않고 v가 1이라면(i행과 j열이 연결되어 있다면) 그냥 바로 merge하여 병합하였는데 이부분에 예외가 있는것인지 아니면 다른 부분에서 예외가 있는것인지 감이 안 잡히는데 어디가 잘 못된것인지 한번 봐주실 수 있나요?
감사합니다 :)
Answer 1
0
안녕하세요. 반갑습니다.
아마도 Path를 저장하는 반복문에 약간 로직이 잘못된 것으로 보입니다.
해당 부분을
for (int i = 1; i <= n; ++i) {
int n;
cin >> n;
paths.push_back(n);
}
아래와 같이 수정하시면 되지 않을까 싶습니다.
for (int i = 1; i <= m; i++)
{
int path;
cin >> path;
paths.push_back(path);
}
감사합니다.
새해 복 많이 받으세요 :)
수강평 이벤트
0
15
2
Reticle이 안나옵니다.
0
5
1
진행 방법 질문드립니다!
0
23
2
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
18
1
Singleton 관련 질문입니다.
1
27
2
갑자기 채점 사이트가 바뀌었어요
0
19
1
42. [세그먼트 트리 실전 문제] 구간 합 구하기3 (백준 2042)
0
64
1
10986번 질문 있습니다!
0
45
0
LCA 빠르게 찾기 - 트리의 높이에 따른 k값 질문
0
119
0
백준 1377 질문있습니다
0
218
1
백준 1722 교재 81 질문
0
330
1
백준11505, 교재 73번
0
282
1
백주 1456번
0
200
1
백준 1325, 교재 47번 문제 질문입니다.
0
358
1
백준 11404 플로이드 문제 질문있습니다.
0
260
1
문제 85번 질문드립니다
0
322
1
백준 13023 질문있습니다.
0
204
1
문제 8번 질문드립니
0
305
1
백준 2251 C++ 질문 있습니다.
0
398
2
퀵정렬 질문
3
291
1
i==k일떄 i++안해도되지않나요
0
436
1
알고리즘 코딩테스트 문제풀이 강의 - 14 절댓값 힙 구현하기 (백준 11286)
0
550
1
알고리즘 코딩테스트 문제풀이 강의 - 9 DNA 비밀번호 (백준 12891)
1
573
1
C++은 실전문제에 대한 강의가 없나요? 자바나 파이썬은 있는데 없는거 같아서요.
2
591
2

