#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graph;
vector<vector<int>> group_members;
vector<bool> visited;
vector<int> links;
vector<int> dist;
int id = 0;
void dfs(int u) {
if (visited[u]) return;
visited[u] = true;
if (links[u] < 2) group_members[id].push_back(u);
for (auto v : graph[u]) {
if (!visited[v]) dfs(v);
}
}
int bfs (int u, int V) {
queue<int> q;
int curr = 1;
int next = 0;
int depth = 0;
q.push(u);
while (!q.empty()) {
u = q.front();
q.pop();
curr--;
if (visited[u]) continue;
for (auto v : graph[u]) {
if (visited[v]) continue;
q.push(v);
next++;
}
visited[u] = true;
if (curr <= 0) {
curr = next;
next = 0;
depth++;
}
}
return depth;
}
int main () {
cin.tie(0)->sync_with_stdio(0);
int V, E;
int u, v;
int max_len = INT_MIN;
cin >> V >> E;
graph.resize(V);
group_members.resize(V);
visited.assign(V, false);
links.assign(V, 0);
dist.assign(V, 1);
for (int i = 0; i < E; i++) {
cin >> u >> v;
u--;
v--;
graph[u].push_back(v);
graph[v].push_back(u);
links[u]++;
links[v]++;
}
for (int i = 0; i < V; i++) {
if (visited[i]) continue;
dfs(i);
id++;
}
for (int i = 1; i < id; i++) {
graph[group_members[i-1].back()].push_back(group_members[i].back());
graph[group_members[i].back()].push_back(group_members[i-1].back());
links[group_members[i].back()]++;
links[group_members[i-1].back()]++;
if (links[group_members[i].back()] > 1) {
group_members[i].pop_back();
}
if (links[group_members[i-1].back()] > 1) {
group_members[i-1].pop_back();
}
}
for (int i = 0; i < V; i++) {
if (links[i] > 1) continue;
visited.assign(V, false);
max_len = max(max_len, bfs(i, V));
}
cout << max_len;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |