#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graph;
vector<bool> visited;
vector<int> links;
int bfs (int u, int V, int id, vector<int> &comp) {
queue<int> q;
int curr = 1;
int next = 0;
int depth = 0;
q.push(u);
while (!q.empty()) {
u = q.front();
q.pop();
comp[u] = id;
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 len = 0;
int id = 0;
cin >> V >> E;
graph.resize(V);
visited.assign(V, false);
links.assign(V, 0);
vector<int> comp_size(V);
vector<int> comp(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 (links[i] > 1) continue;
if (comp[i] != -1) comp_size[comp[i]] = max(comp_size[comp[i]], bfs(i, V, comp[i], comp));
else {
comp_size[id] = bfs(i, V, id, comp);
id++;
}
}
for (int i = 0; i < id; i++) {
len += comp_size[i];
}
cout << 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... |