최대 1 분 소요

Question

1325Q


Solution

  • ‘A가 B를 신뢰하는 경우에는 B를 해킹하면, A도 해킹할 수 있다’ 라는 구문은 단방향을 의미한다.
  • 재귀 횟수가 가장 많은 노드를 찾으면 된다. (단, 여러개 일수가있다.)

Cord

#include <iostream>
#include <vector>
#include <algorithm>
#include <memory.h>

#define MAX 10001

using namespace std;

int n, m;
int cnt;

vector<int> v[MAX];
bool visited[MAX];
vector<int> vCnt;

void dfs(int _x)
{
	visited[_x] = true;

	for (int i = 0; i < v[_x].size(); i++)
	{
		int next = v[_x][i];
		if (!visited[next])
		{
			cnt++;
			dfs(next);
		}
	}
}


int main()
{
	// 입력 컴퓨터, 간선의 수
	cin >> n >> m;

	// 단방향 간선 연결
	for (int i = 0; i < m; i++)
	{
		int a, b;
		cin >> a >> b;
		v[b].push_back(a);
	}

	// dfs 실행
	int maxCnt = 0;
	for (int i = 1; i <= n; i++)
	{
		memset(visited, false, sizeof(visited));
		cnt = 0;
		dfs(i);

		if (maxCnt == cnt) { vCnt.push_back(i); }
		else if (maxCnt < cnt)
		{
			maxCnt = cnt;
			vCnt.clear();
			vCnt.push_back(i);
		}
	}

	// 오름차순 정렬
	sort(vCnt.begin(), vCnt.end());

	// 출력
	for (int i = 0; i < vCnt.size(); i++)
	{
		cout << vCnt[i] << '\n';
	}

	return 0;
}

Result

1325

문제를 이해하는 것이 조금 까다로운편이였다.