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 | 31 |
Tags
- Flow
- Bridge
- Floyd
- DP
- Union-Find
- FenwickTree
- TwoPointers
- BinarySearch
- topologicalsort
- LIS
- KMP
- Dijkstra
- DFS
- Math
- Bellman-Ford
- Tree
- SlidingWindow
- ShortestPath
- IndexedTree
- MST
- 2-sat
- mergesorttree
- Sweeping
- LCA
- ArticulationPoint
- backtracking
- scc
- Implementation
- greedy
- BFS
Archives
- Today
- Total
정리충의 정리노트
[백준] 11400: 단절선 본문
0. 문제 주소
https://www.acmicpc.net/problem/11400
1. 풀이
[PS/BFS & DFS] - [BOJ] 11266: 단절점과 다른 점은 다음과 같다.
1. 루트 노드인지를 체크하지 않아도 된다.
2. DFS 탐색 함수에 parent 인자를 추가한다. 이는 low를 정의할 때, 바로 직전에서 내려온 parent는 고려하지 않기 위함이다.
3. 그리고 order[curr]가 low보다 strictly 작아야 한다.
다른 건 다 똑같다.
단절점이지만 단절선은 안되는 경우를 생각해보면 이해할 수 있다.
2. 풀이 코드
* 유의할 점
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <algorithm>
#define MAX 100003
#define INF 987654321
#define pii pair<int, int>
using namespace std;
int V, E;
int order[MAX];
vector<int> graph[MAX];
set<pii> ans;
int cnt;
int dfs(int curr, int parent){
order[curr] = ++cnt;
int ret = order[curr];
for (int next: graph[curr]){
if (next == parent) continue;
if (!order[next]){
int low = dfs(next, curr);
if (order[curr] < low) {
int a = min(curr, next), b = max(curr, next);
ans.insert(pii(a, b));
}
ret = min(ret, low);
}
else{
ret = min(ret, order[next]);
}
}
return ret;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
scanf("%d %d", &V, &E);
if (V==1) {
printf("0\n");
return 0;
}
for (int i=0;i<E;i++){
int u, v;
scanf("%d %d", &u, &v);
graph[u].push_back(v);
graph[v].push_back(u);
}
dfs(1, 0);
printf("%d\n", ans.size());
for (auto it=ans.begin();it!=ans.end();it++){
auto p = *it;
printf("%d %d\n", p.first, p.second);
}
return 0;
}
'PS > BFS & DFS' 카테고리의 다른 글
[백준] 1967: 트리의 지름 (0) | 2020.03.07 |
---|---|
[백준] 11266: 단절점 (1) | 2020.02.21 |
[백준] 1039: 교환 (0) | 2020.02.03 |
[백준] 3055: 탈출 (0) | 2020.02.03 |
[백준] 2668: 숫자고르기 (0) | 2020.01.19 |
Comments