Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 다음 지도 api
- 창훈쓰다
- yolo
- multiset
- 캘리그라피
- 다음 API
- 위상정렬
- 비트마스크
- lower_bound
- MST
- 성화봉송
- Segment Tree
- 생활코딩
- 외판원 순회
- 성화봉송주자
- 다이나믹 프로그래밍
- 영어회화 100일의 기적
- 삼성 코딩테스트
- 백트레킹
- 그리디 알고리즘
- DP
- 이분탐색
- boj
- BFS
- 인간이 그리는 무늬
- BOJ 2098
- 안드로이드 스튜디오
- upper_bound
- 평창동계올림픽
- 언어의 온도
Archives
- Today
- Total
Hoon222y
[BOJ 9466] 텀 프로젝트 본문
https://www.acmicpc.net/problem/9466
dfs의 사이클을 체크하여 사이클의 경우 dfs를 돌리지 않고 최적화 하는 방법으로 시간을 줄이는 문제이다.
찬란한 오답 퍼레이드 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
dfs상에서 사이클을 체크하는 방법은 아직 끝나지 않았지만 visit된 정점을 방문할경우 사이클이 존재한다고 생각하는 것이다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include<iostream> #include<string> #include<stdio.h> #include<algorithm> #include<utility> #include<vector> #include<cstring> #include<queue> #include<cmath> #include<math.h> using namespace std; int par[100100]; int t, n, arr[100100], res; int visited[100010]; int finish[100010]; void cycle(int v, int p){ res++; if (v == p){ return; } cycle(par[v], p); } void dfs(int v){ visited[v] = true; if (!visited[arr[v]]){ par[arr[v]] = v; dfs(arr[v]); }else if (!finish[arr[v]]){ //방문은 되었으나 finisi함수가 되지 않았으면 사이클 체크가 되어있지 않다면 cycle(v, arr[v]); } finish[v] = true; } int main(){ scanf("%d", &t); while (t--){ memset(par, -1, sizeof(par)); memset(visited, 0, sizeof(visited)); memset(finish, 0, sizeof(finish)); res = 0; scanf("%d", &n); for (int i = 1; i <= n; i++){ scanf("%d", &arr[i]); } for (int i = 1; i <= n; i++){ if (!visited[i]){ dfs(i); } } printf("%d\n", n - res); } return 0; } | cs |
http://blog.naver.com/PostView.nhn?blogId=kks227&logNo=220785731077
갓퍼마리오님의 설명을 참고한다면 더 쉽게 접근할 수 있을것이다.
'코딩 > BOJ & 알고스팟' 카테고리의 다른 글
[BOJ 12869] 뮤탈리스크 (0) | 2017.06.18 |
---|---|
[BOJ 2110] 공유기 설치 (0) | 2017.06.18 |
[BOJ 1300] K번째 수 (0) | 2017.06.15 |
[BOJ 1194] 달이 차오른다, 가자. (1) | 2017.06.15 |
[BOJ 14614] Calculate! (3) | 2017.05.30 |
Comments