2458 : 키 순서

풀이

모든 노드에서 dfs를 정방향으로 한 번, 역방향으로 한 번 돌려주자!

정방향은 나보다 큰 친구들, 역방향은 나보다 큰 친구들의 개수(?)이다.

이 둘을 합한 값이 나를 제외한 n-1명과 같은지 알아보자!

코드

#include <bits/stdc++.h>
using namespace std;

int n, m, t, vst[2][501];
vector<int> gph[2][501];

int dfs(int now) {
	int ret = 1; vst[t][now] = 1;
	for (int nxt : gph[t][now]) if (!vst[t][nxt]) ret += dfs(nxt);
	return ret;
}

int main() {
	int u, v;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < m; i++) {
		scanf("%d %d", &u, &v);
		gph[0][u].push_back(v), gph[1][v].push_back(u);
	}

	int cnt = 0;
	for (int i = 1; i <= n; i++) {
		memset(vst, 0, sizeof(vst));
		t = 0, u = dfs(i);
		t = 1, v = dfs(i);
		if (u + v - 1 == n) cnt++;
	}

	printf("%d", cnt);

	return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2017-08-20 00:36

Read more posts by this author