알고리즘
[C++] 백준 1325번 효율적인 해킹
J3SUNG
2019. 8. 22. 13:34
728x90
DFS, BFS 문제입니다.
어떤 컴퓨터에서 가장 많이 다른 컴퓨터를 해킹 할 수 있는지 찾는 문제입니다.
신뢰하는 컴퓨터를 해킹할 수 있으며, 해킹한 컴퓨터를 신뢰하는 컴퓨터도 해킹할 수 있습니다.
DFS를 통해서 신뢰하는 컴퓨터들을 찾을 수 있으며, 방문 배열을 만들어서 이미 방문한 곳을 가지 않습니다.
배열의 크기가 커서 vector를 사용했습니다.
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
vector<int> v[10010];
int visit[10010];
int arr[10010];
int c;
void DFS(int a, int x)
{
visit[a] = 1;
for (int i = 0; i < v[a].size(); ++i) {
int b = v[a].at(i);
if (visit[b] == 0) {
DFS(b, x);
++c;
}
}
}
int main(int argc, char *argv[])
{
int n, m;
int maxNum = -987654321;
scanf("%d", &n);
scanf("%d", &m);
memset(visit, 0, sizeof(visit));
for (int i = 1; i <= m; ++i) {
int a;
int b;
scanf("%d", &b);
scanf("%d", &a);
v[a].push_back(b);
}
for (int i = 1; i <= n; ++i) {
c = 0;
memset(visit, 0, sizeof(visit));
DFS(i, i);
arr[i] = c;
maxNum = max(maxNum, c);
}
for (int i = 1; i <= n; ++i) {
if (arr[i] == maxNum) {
printf("%d ", i);
}
}
return 0;
}