※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 19276번 문제인 Magic Trick이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/19276
주어진 원순열을 하나의 사이클로 구성된 그래프로 생각하자. 이 때 각각의 주어지는 세 점의 묶음은 어떤 한 정점과 그와 인접한 두 정점들로 이루어져 있으므로, 각 묶음에서 두 정점을 고르면 그래프상에서의 두 점 사이의 거리가 1 또는 2가 됨을 알 수 있다.
추가로,
아래는 제출한 소스코드이다.
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int N;
vector<int> G[200001];
map<pair<int, int>, int> mp;
bool visited[200001];
void dfs(int cur) {
cout << cur << ' ';
visited[cur] = 1;
for (auto &nxt:G[cur]) {
if (visited[nxt]) continue;
dfs(nxt);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int k = 0; k < N; k++) {
int x, y, z; cin >> x >> y >> z;
mp[make_pair(min(x, y), max(x, y))]++;
mp[make_pair(min(y, z), max(y, z))]++;
mp[make_pair(min(z, x), max(z, x))]++;
}
for (auto &p:mp) {
if (p.second > 1) G[p.first.first].emplace_back(p.first.second), G[p.first.second].emplace_back(p.first.first);
}
dfs(1);
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 17500 // C++] 국경 (0) | 2024.08.17 |
---|---|
[BOJ 29779 // C++] Colliding Encoding (0) | 2024.08.16 |
[BOJ 1471 // C++] 사탕 돌리기 (0) | 2024.08.14 |
[BOJ 20913 // C++] Mixtape Management (0) | 2024.08.13 |
[BOJ 27503 // C++] 요가 수업 (0) | 2024.08.12 |