PS

BOJ 29810 : 배신자

lickelon 2024. 4. 4. 22:47
  • 문제 링크 : boj.kr/29810
  • 난이도 : G3
  • 태그 : 그래프, DFS
 

29810번: 배신자

김한양은 아웃사이더, 일명 아싸이다. 한 마디로, 친구가 별로 없다. 주변을 둘러보니 인싸(인사이더, 각종 행사나 모임에 적극적으로 참여하면서 사람들과 잘 어울려 지내는 사람을 이르는 말)

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    vector<int> e[200001];
    bool visit[200001] = {};
    int n, m;
    cin >> n >> m;
    for(int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        e[a].emplace_back(b);
        e[b].emplace_back(a);
    }
    
    int x;
    cin >> x;
    visit[x] = true;
    
    int ans = 1;
    for(int i = 1; i <= n; i++) {
        if(visit[i]) continue;

        stack<int> _st;
        _st.push(i);
        visit[i] = true;

        int cntX = 0;
        int temp = 1;
        while(!_st.empty()) {
            int t = _st.top(); _st.pop();
            for(auto u : e[t]) {
                if(u == x) cntX++;
                if(visit[u]) continue;
                _st.push(u);
                visit[u] = true;
                temp++;
            }
        }
        if(cntX == 1) temp++;
        ans = max(ans, temp);
    }
    cout << ans;

    return 0;
}

풀이

배신자 X를 이미 방문했다 생각하고 DFS를 하면 연결된 그룹을 구할 수 있다.

이 그룹에서 X와 연결된 간선이 1개라면 X를 그룹에 포함하고, 그렇지 않다면 포함하지 않는다.

'PS' 카테고리의 다른 글

BOJ 23085 : 판치기  (0) 2024.04.06
BOJ 28449 : 누가 이길까  (0) 2024.04.05
BOJ 10589 : 마법의 체스판  (0) 2024.04.03
BOJ 1461 : 도서관  (0) 2024.04.02
BOJ 12764 : 싸지방에 간 준하  (0) 2024.04.01