๋ฌธ์
ํด์ปค ๊น์ง๋ฏผ์ ์ ์๋ ค์ง ์ด๋ ํ์ฌ๋ฅผ ํดํนํ๋ ค๊ณ ํ๋ค. ์ด ํ์ฌ๋ N๊ฐ์ ์ปดํจํฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊น์ง๋ฏผ์ ๊ท์ฐฎ๊ธฐ ๋๋ฌธ์, ํ ๋ฒ์ ํดํน์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์ปดํจํฐ๋ฅผ ํดํน ํ ์ ์๋ ์ปดํจํฐ๋ฅผ ํดํนํ๋ ค๊ณ ํ๋ค.
์ด ํ์ฌ์ ์ปดํจํฐ๋ ์ ๋ขฐํ๋ ๊ด๊ณ์, ์ ๋ขฐํ์ง ์๋ ๊ด๊ณ๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, A๊ฐ B๋ฅผ ์ ๋ขฐํ๋ ๊ฒฝ์ฐ์๋ B๋ฅผ ํดํนํ๋ฉด, A๋ ํดํนํ ์ ์๋ค๋ ์๋ฆฌ๋ค.
์ด ํ์ฌ์ ์ปดํจํฐ์ ์ ๋ขฐํ๋ ๊ด๊ณ๊ฐ ์ฃผ์ด์ก์ ๋, ํ ๋ฒ์ ๊ฐ์ฅ ๋ง์ ์ปดํจํฐ๋ฅผ ํดํนํ ์ ์๋ ์ปดํจํฐ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์, N๊ณผ M์ด ๋ค์ด์จ๋ค. N์ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์, M์ 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ์ ๋ขฐํ๋ ๊ด๊ณ๊ฐ A B์ ๊ฐ์ ํ์์ผ๋ก ๋ค์ด์ค๋ฉฐ, "A๊ฐ B๋ฅผ ์ ๋ขฐํ๋ค"๋ฅผ ์๋ฏธํ๋ค. ์ปดํจํฐ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๊ฐ ํ๋์ฉ ๋งค๊ฒจ์ ธ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์, ๊น์ง๋ฏผ์ด ํ ๋ฒ์ ๊ฐ์ฅ ๋ง์ ์ปดํจํฐ๋ฅผ ํดํนํ ์ ์๋ ์ปดํจํฐ์ ๋ฒํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋ค.
์ค๋ฒ1
bfs๋ก๋ ํ ์ ์์ง๋ง.. dfs ํ์ด๊ฐ ๋ ์งง๊ณ ๊ฐ๊ฒฐํ๋ค.
์ด์ฐจ์๋ฐฐ์ด๋ก ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค๊ณ ํด์ ์ผ์ฐจ์๋ฐฐ์ด๊ณผ ๋ฒกํฐ๋ก ํ์๋ค!
matrix ํ์์ ์ํ์ข์ฐ ํ์์ ์ข ์ฌ์ด๋ฐ, ์คํ๋ ค ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ ํท๊ฐ๋ฆฌ๋๋ฏ..
๋์ ํ์ด
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int n;
int m;
const int MAX = 10001;
vector<int> map[MAX];
int visited[MAX];
queue<int> q;
vector<pair<int, int>> v; // <์ปดํจํฐ ๋ฒํธ, ํดํน ๊ฐ๋ฅํ ์ปดํจํฐ ์> ๋ฒกํฐ
int canHack = 0; // ํดํน ๊ฐ๋ฅํ ์ปดํจํฐ ์
void resetV(){
for (int i = 0; i <= n; ++i){
visited[i] = 0;
}
}
void dfs(int i){
visited[i] = 1;
canHack++;
for(auto k: map[i]){
if(!visited[k]) {
dfs(k);
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
int a;
int b;
for (int i = 0; i < m; ++i){
cin >> a >> b;
map[b].push_back(a);
}
for (int i = 1; i <= n; ++i){
dfs(i);
resetV();
v.push_back({canHack, i});
// cout << canHack << " / " << i << "\n";
canHack = 0;
}
sort(v.begin(), v.end(), greater<>());
int maxHack = v[0].first;
vector<int> answer;
for (auto i: v){
if(i.first == maxHack) answer.push_back(i.second);
else break;
}
sort(answer.begin(), answer.end());
for(int i: answer) cout << i << " ";
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 2169 : ๋ก๋ด ์กฐ์ข ํ๊ธฐ (DP) (0) | 2023.05.26 |
---|---|
[C++/BOJ] 2644 : ์ด์๊ณ์ฐ (๋ค์ต์คํธ๋ผ) (0) | 2023.05.18 |
[C++/BOJ] 1012 : ์ ๊ธฐ๋ ๋ฐฐ์ถ (BFS/DFS) (0) | 2023.05.12 |
[C++/BOJ] 1417 : ๊ตญํ์์ ์ ๊ฑฐ (์๋ฃ๊ตฌ์กฐ) (1) | 2023.05.06 |
[C++/BOJ] 9012 : ๊ดํธ (์๋ฃ๊ตฌ์กฐ) (1) | 2023.05.06 |