ํ์ด๋ฅผ ๋ณด๋ฉด ๋งค์ฐ ๋น์ฐํ์ง๋ง, ๊ทธ๋ํ์ ๋ํ ๊ฐ๋
์ด ํ์คํ ๋์ด ์์ง ์๋ค๋ฉด ์์ด๋์ด ๋ฐ์์ด ์ด๋ ค์ธ ์ ์๋ค. ์ด๋ค ์์๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ edge
์ฐ๊ฒฐ๋ก ๋ณผ ์ ์๊ณ , ์ด๋ฐ ์กฐ๊ฑด์ ๋ง์กฑํ๊ฒ๋ ํด๋ ๋ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ถํฐ ์ฐจ๋ก๋๋ก dfs
๋ก ๋ฐฉ๋ฌธํด ๋๊ฐ๋ฉด, ์ ์ผ ๋์ ๋๋ฌํ๋ ๋
์์ด leaf
๊ฐ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ ๋ค์ ๋
์์ leaf-1
์ด ๋๊ณ , ์ด๊ฒ์ด ๋ฐ๋ณต๋๋ฉด ๊ฒฐ๊ตญ root
๊น์ง ๋ฐ๋ณต๋๋ค. root
๋ ์ ์ผ ๋ค์ ์๋ ๋
์์ ๋์๋๊ณ , leaf
๋ ์ ์ผ ์์ ์๋ ๋
์์ ๋์๋๋ฏ๋ก, ์ด ์์๋๋ก dfs
๋ก ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋๋ ๋ฌธ์ ์ด๋ค.
์์ ์ ๋ ฌ
, ์ฆ topological sort
๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ๋ง์ฝ์ dfs
๊ฐ ์๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค๊ณ ํ๋ฉด, dfs
ํจ์์์ ๋์ฌ ๋ ์์๋ฅผ ๊ธฐ๋กํ ๋ค์์ ํด๋น ์์๋๋ก ์ ๋ ฌ์ ํ๋ฉด ๋๊ฒ ๋ค.
#include <bits/stdc++.h>using namespace std;int visited[32001];vector<int> edges[100001];void dfs(int v) {if (visited[v]) return;visited[v] = 1;for(int t: edges[v]) {dfs(t);}printf("%d ", v);}int main() {int N, M; scanf("%d %d", &N, &M);for(int i = 0; i < M; ++i) {int a, b;scanf("%d %d", &a, &b);edges[b].push_back(a);}for(int i = 1; i <= N; ++i) {dfs(i);}printf("\n");return 0;}