반응형

문제출처

https://www.acmicpc.net/problem/1325


문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
/**
 * 모든 노드를 탐색하고, 탐색 가능한 최댓값을 구하는 문제입니다.
 * A가 B를 신뢰할 경우, B를 해킹하면 A도 해킹이 가능하다라는 설명이 요점입니다.
 * 즉, A가 B를 신뢰한다는 것을 다르게 말하면, B → A 로 연결된 방향 그래프인것이죠.
 * 
* 풀이한 순서를 설명드리면 아래와 같습니다.
* 먼저 입력을 받을때 신뢰 관계를 network에 저장합니다.
 * 이후 컴퓨터 개수가 n개이기 때문에 bfs를 n번 호출하여 해킹가능한 최대 컴퓨터를 구합니다.
 * 해킹가능한 최대 결과값이 같은 컴퓨터가 존재할 수 있으므로 결과 벡터를 생성해 결과값을 저장합니다.
 * 이때 가장 큰 값을 카운트 한 값과 비교하여 같으면 결과벡터에 추가를 하고,
 * 카운트 값이 크면 결과벡터를 초기화 한후 push를 합니다.
 * 조금만 생각해 보면 알 수 있는데, 최대 컴퓨터를 구하는 것이므로 새로운 최대 컴퓨터가 있다면 이전 결과는 모두 필요가 없기 때문입니다.
 * 생각보다 어려웠던 문제인데 bfs말고 dfs로도 풀이가 가능하니 최대한 빨리 dfs로 풀이하고 업데이트 하겠습니다.
 */
cs


소스코드

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 <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
int n,m,maxValue;
vector<vector<int> > network;
vector<int> result;
bool visit[10001];
void bfs(int s) {
    queue<int> q;
    q.push(s);
    visit[s]=1;
    int cnt=0;
    while(!q.empty()) {
        int src=q.front();
        q.pop();
        for(int i=0; i<network[src].size(); i++) {
            int dest=network[src][i];
            if(!visit[dest]) {
                visit[dest]=1;
                q.push(dest);
                cnt++;
            }
        }
    }
    if(maxValue<cnt) {
        maxValue=cnt;
        result.clear();
        result.push_back(s);
    } else if(maxValue==cnt) {
        result.push_back(s);
    }
}
int main() {
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin>>n>>m;
    network.resize(n+1);
    int src,dest;
    for(int i=0; i<m; i++) {
        cin>>src>>dest;
        network[dest].push_back(src);
    }
    for(int i=1; i<=n; i++) {
        memset(visit, 0sizeof(visit));
        bfs(i);
    }
    sort(result.begin(), result.end());
    for(int i=0; i<result.size(); i++) {
        cout<<result[i]<<" ";
    }
    return 0;
}
cs


반응형

'Algorithm' 카테고리의 다른 글

[BOJ 10163] 색종이  (0) 2019.01.24
[BOJ 1697] 숨바꼭질  (0) 2019.01.23
[BOJ 10039] 평균점수  (0) 2019.01.22
[BOJ 2468] 안전영역  (0) 2019.01.22
[BOJ 2661] 좋은 수열  (0) 2019.01.21

+ Recent posts