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
- Flutter
- dart
- 14863
- 재귀
- BOJ14889
- sw expert academy
- Python
- 삼성
- C++
- 서울에서경산까지
- 재귀함수
- BOJ
- 26008
- 1로만들기2
- 1781
- 그리디
- spring boot
- 15353
- 스택
- 백준
- 4811
- 동적프로그래밍
- D1
- 크로스핏
- DP
- 15662
- 해시해킹
- 브루트포스
- 회전하는큐
- Crossfit
Archives
- Today
- Total
곧죽어도 콛잉
[그래프 / BOJ 1325 / C++] 효율적인 해킹 본문
https://www.acmicpc.net/problem/1325
1325번: 효율적인 해킹
첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 관계가 A B와 같은 형식으로 들어오며, "A가 B를 신뢰한
www.acmicpc.net
1) 인접 리스트를 선언한다.
2) 자식노드를 순회하는 dfs를 선언한다. 단, int형을 반환한다.
3) 리턴값끼리 비교해가며 최대값을 갱신한다. 단, 최대값이 동일한 경우 해당 노드를 res 배열에 넣어준다.
어렵다..... 고 생각이 들지만 이게 트리 일종이라고 생각하면 어느정도 답이 나온다.
나는 바로 인접 리스트를 만들고 dfs를 돌렸다.
처음에는 인접 리스트들의 size를 구해서 가장 큰 size를 가진 노드가 답이라고 생각해서 코드를 짜려했는데
잘되지 않았다.
우선 그림부터 그려보자!
여기서 착각하면 안되는게 신뢰관계라고 해서 B해킹시 A해킹은 맞지만, 그 역(A->B)은 성립되지 안되는 걸 꼭 짚고 가야한다.
나는 그걸 착각해서 고생을 좀 많이했다 ㅠㅠ 문제를 꼭 제대로 읽자. (나만 바보였을지도...^)
bfs로 트리를 순회하는데, 여기서 주목해야할 점이 바로 void가 아니라 int형을 반환한다.
이것도 이전 트리문제와 비슷한데, 재귀를 돌수록 합이 증가해 결국 최종 리턴값은 자식 노드들의 개수 + 1(자기자신)가 된다!
이렇게 최종적으로 나온 리턴값의 최대값을 구하면 된다! 같을 경우에는, 별도의 배열에 넣어주자.
#include <bits/stdc++.h>
using namespace std;
int N, M, A, B;
vector<int> arr[10001];
int vis[10001], res[10001];
int dfs(int here){
vis[here] = 1;
int ret = 1;
for(int there : arr[here]){
if(vis[there]) continue;
ret+=dfs(there);
}
return ret;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N >> M;
for(int i = 0 ; i < M ; i++){
cin >> A >> B;
arr[B].push_back(A);
} // 트리 만들기 node는 1부터 N까지.
int mx = 0;
for(int i = 1 ; i <= N ; i++){
memset(vis, 0, sizeof(vis));
res[i] = dfs(i);
mx = max(res[i], mx);
} // 트리 순회해서 가장 사이즈가 큰 노드 찾기.
for(int i = 1 ; i <= N ; i++) {
if(mx==res[i]){cout << i << ' ';}
}
}
'Coding Test > C++' 카테고리의 다른 글
[완전탐색 / BOJ 1189 / C++] 컴백홈 (0) | 2023.03.08 |
---|---|
[그래프 / BOJ 14502 / C++] 연구소 (0) | 2023.03.06 |
[그래프 / BOJ 1068 / C++] 트리 (0) | 2023.02.28 |
[구현 / BOJ 2910 / C++] 빈도 정렬 (0) | 2023.02.15 |
[재귀 / BOJ 1992 / C++] 쿼드트리 (0) | 2023.02.15 |
Comments