-
[Baekjoon - 10037] Decorating the Pastures문제 풀이/Baekjoon Online Judge 2023. 4. 17. 22:48
난이도: Gold II
태그
더보기- Bipartite Graph
풀이
1. 주어진 조건을 만족하는 그래프는 어떤 모양일까?
더보기F를 하나의 색으로, J를 다른 하나의 색으로 보면
영락없는 이분 그래프가 됩니다.
즉, 이분 그래프의 조건을 만족하지 않는다면 답은 자연스럽게 -1이 되겠죠.
2. 그럼, 문제의 답은?
더보기이분 그래프의 각 컴포넌트를 두 색으로 나누는 방법은 유일합니다.
// 엄밀히는, 색1과 색2를 swap하는 경우를 제외하고요.
그러므로, 그렇게 나눈 뒤 둘 중 더 많은 쪽을 J로 정해주면 됩니다.
3. 코드
더보기12345678910111213141516171819202122232425262728vector<int> adj[50020];int chk[50020]; int cnt[3];bool dfs(int now, int clr){chk[now] = clr; cnt[clr] += 1;bool res = 1;for (int nxt : adj[now]){if (chk[nxt]){ res &= (clr != chk[nxt]); }else{ res &= dfs(nxt, clr^3); }}return res;}void Main(){int n, m; cin >> n >> m;while (m--){int v, w; cin >> v >> w;adj[v].push_back(w); adj[w].push_back(v);}int ans = 0;for (int i = 1; i <= n; i++){if (chk[i]){ continue; }cnt[1] = cnt[2] = 0;if (!dfs(i, 1)){ cout << -1; return; }ans += max(cnt[1], cnt[2]);}cout << ans;}cs '문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon - 17502] 클레어와 팰린드롬 (0) 2023.06.05 [Baekjoon - 16894] 약수 게임 (0) 2023.06.03 [Baekjoon - 3411] Jewel heist (0) 2023.03.14 [Baekjoon - 19813] Dates (0) 2023.03.13 [Baekjoon - 18694] Game of Nim Everywhere (0) 2023.03.09