[BOJ/C++] 1325 효율적인 해킹

GamzaTori·2024년 9월 24일

Algorithm

목록 보기
54/133

BFS를 이용하여 문제를 해결할 수 있습니다.

A가 B를 신뢰할때 B를 통해 A를 해킹할 수 있으므로 B->A로 간선이 연결됩니다.

방향이 있는 그래프이기 때문에 인접 리스트에서 하나의 노드에만 추가해야합니다.

#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <stack>
#include <deque>
#include <queue>
#include <string>

using namespace std;

using int32 = long;
using int64 = long long;

static vector<vector<int>> V;
static vector<bool> visited;

int BFS(int node);

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int N, E;
    cin >> N >> E;

    V = vector<vector<int>>(N+1);
    visited = vector<bool>(N + 1, false);

    for (int i = 0; i <= N; i++)
        visited[i] = true;


    for(int i=0; i<E; i++)
    {
        int v, e;
        cin >> v >> e;
        V[e].push_back(v);
    }

    int maxCount = 0;
    vector<int> result(N + 1);
    for(int i=1; i<=N; i++)
    {
        fill(visited.begin(), visited.end(), false);
        int count = BFS(i);
        result[i] = count;
        maxCount = max(maxCount, count);
    }

    for(int i=1; i<=N; i++)
    {
        if (result[i] == maxCount)
            cout << i << ' ';
    }

    return 0;
}



int BFS(int node)
{
    queue<int> q;
    q.push(node);
    visited[node] = true;
    int count = 0;

    while(!q.empty())
    {
        int cur = q.front();
        q.pop();

        for(int i : V[cur])
        {
	        if(!visited[i])
	        {
                visited[i] = true;
                q.push(i);
                count++;
	        }
        }
    }
    
    return count;
}
profile
게임 개발 공부중입니다.

0개의 댓글