Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 오퍼레이팅시스템
- 컴퓨터공학과
- bfs
- c++
- 컴공과
- 정석
- Operating System
- 컴공
- Stack
- Computer science
- 북리뷰
- 브루트포스
- 문제풀이
- 알고리즘
- 코딩
- OS
- coding
- DP
- cs
- 정석학술정보관
- 코테
- 스택
- 자료구조
- 개발
- 오에스
- 구현
- 그래프
- 백준
- vector
- 너비우선탐색
Archives
- Today
- Total
Little Jay
[C++] 백준 14675번 - 단절점과 단절선 본문
골드문제라 겁먹었지만 Tree개념을 제대로만 알고 있다면 어려운 문제는 아니었다.
먼저 단절점에 대해서 생각을 해보자.
단절점에서 해당 vertex가 삭제가 되었는데, child가 없다면 해당 vertex는 단절점이 아니고, 그래프로 하나로 유지될 것이다. 따라서 해당 vertex의 size가 1 초과라면 당연히 해당 정점은 단절점이 된다.
반면 단절선은 무의미하다. 편향 tree라고 하더라도 간선을 하나 자르면 무조건 그래프는 2개 이상으로 쪼개진다.
이 점을 고려하여 잘 그림만 그려도 쉽게 풀 수 있다.
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
int n, q, t, k;
vector<int> tree[100001];
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
for (int i = 0; i < n - 1; i++) {
int x, y; cin >> x >> y;
tree[x].push_back(y);
tree[y].push_back(x);
}
cin >> q;
while (q--) {
cin >> t >> k;
switch (t) {
case 1:
if (tree[k].size() > 1) {
cout << "yes" << endl;
}
else cout << "no" << endl;
break;
case 2:
cout << "yes" << endl;
break;
default:
break;
}
}
return 0;
}
'알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 14938번 - 서강그라운드 (0) | 2022.09.24 |
---|---|
[C++] 백준 11725번 - 트리의 부모 찾기 (0) | 2022.09.22 |
[C++] 백준 13164번 - 행복한 유치원 (0) | 2022.09.03 |
[C++] 백준 10026번 - 적녹색약 (0) | 2022.08.31 |
[C++] 백준 1965번 - 상자 넣기 (0) | 2022.08.30 |
Comments