#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
vector<vector<int>> dp(n+1, vector<int>(n+1, 100000000));
for (int i = 1; i <= n; i++) {
dp[i][i] = 0;
}
for(int i= 1; i <= m; i++) {
int x, y;
cin >> x >> y;
dp[x][y] = 1;
dp[y][x] = 1;
}
for(int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
}
}
}
vector<vector<int>> we(n+1);
for (int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if(100000000 != dp[i][j]) {
we[i].push_back(j);
}
}
if(we[i].empty()) continue;
sort(we[i].begin(), we[i].end());
}
vector<int> v;
vector<bool> visited(n+1, false);
for(int i = 1; i <= n; i++) {
if(visited[i] || we[i].empty()) continue;
int index = we[i][0];
int mins = 1000000000;
for(auto j : we[i]) {
visited[j] = true;
int sum = 0;
for(auto k : we[i]) {
sum = max(sum, dp[j][k]);
}
if(mins > sum) {
mins = sum;
index = j;
}
}
v.push_back(index);
}
cout << v.size() << endl;
sort(v.begin(), v.end());
for(auto i : v) {
cout << i << endl;
}
}
'개발 > 알고리즘' 카테고리의 다른 글
백준 1038) 감소하는 수 골드 5 - 백트래킹 (0) | 2024.12.10 |
---|---|
백준 3745 ) 오름세 골드 2 LIS(n log n) (0) | 2024.12.06 |
백준 2458) 키순서 골드 4 C++ (0) | 2024.12.04 |
백준 회의준비) 골드 2 2610 플로이드 워셜 (0) | 2024.12.04 |
백준 2660 플로이드 워셜 ) 골드5 - 회장뽑기 (0) | 2024.12.03 |