본문 바로가기

Algorithm

C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 1325번:효율적인 해킹(DFS) 답

반응형
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
//가장 많이 연결되어 있는 간선을 가지고 있는 점을 찾아야 한다.
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int n, m,u,v,c[10001],d[10001];//각 정점에 연결된 간선의 개수가 몇인지 저장하는
 
vector <int> a[10001];
vector <int> p(10001);//가장 많은 간전을 가지고 있는 점을 저장함
void DFS(int x)
{
    c[x] = 1;
    d[x]++;
    for (int i = 0; i < a[x].size(); i++)
    {
        int y = a[x][i];
        if (c[y] == 0)
            DFS(y);
    }
}
int main() {
    int big = 0,k=1;
    cin >> n >> m;
    while (m--)
    {
        cin >> u >> v;
        a[u].push_back(v);//단방향 그래프이기 때문
    }
    for (int i = 1; i <= n; i++)
    {
        for (int i = 1; i <= n; i++)
            c[i] = 0;
        DFS(i);
    }
    for (int i = 1; i <= n; i++)
        if (d[i] > big)//가장 많은 간전을 저장한 수를 저장
            big = d[i];
    for (int i = 1; i <= n; i++)
    {
        if (big == d[i])
        {
            p[k++= i;//인덱스를 저장
        }
    }
    sort(p.begin(), p.begin() + n);
    for (int i = 1; i <= n; i++)
        if(p[i]!=0)
            cout << p[i] << ' ';
}
cs