Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <stack>
- #include <queue>
- #include <map>
- #include <string>
- #include <cmath>
- #include <stdio.h>
- using namespace std;
- #define lint long long
- #define INF 1000000000
- #define MOD 1000000007
- #define pb push_back
- #define mp make_pair
- int used[10005];
- vector <int> g[10005];
- int mxg = -1, mx;
- int pp[10005];
- int f[10005];
- bool cmp(int u, int v) {
- return f[u] < f[v];
- }
- void dfs(int v, int x) {
- if (x > mx) {
- mx = x;
- mxg = v;
- }
- used[v] = 1;
- for (int i = 0; i < g[v].size(); ++i) {
- int to = g[v][i];
- if (used[to]) continue;
- --f[to];
- }
- sort(g[v].begin(), g[v].end(), cmp);
- for (int i = 0; i < g[v].size(); ++i) {
- int to = g[v][i];
- if (used[to]) continue;
- pp[to] = v;
- dfs(to, x + 1);
- }
- }
- int st[100005];
- int main() {
- int m, n;
- scanf("%d %d", &n, &m);
- for (int i = 0; i < m; ++i) {
- int aa, bb;
- scanf("%d %d", &aa, &bb);
- g[bb].pb(aa);
- g[aa].pb(bb);
- ++f[aa];
- ++f[bb];
- }
- if (n == 1) {
- printf("1\n1");
- return 0;
- }
- mx = -1;
- dfs(1, 1);
- for (int i = 1; i <= n; ++i) {
- used[i] = 0;
- }
- pp[mxg] = -1;
- mx = -1;
- dfs(mxg, 1);
- printf("%d\n", mx);
- while (1) {
- printf("%d ", mxg);
- mxg = pp[mxg];
- if (mxg == -1) break;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement