#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
int n,m,brkomp=0;
vector<int> adj[MAXN];
vector<int> nodes[MAXN];
int dist[MAXN];bool pos[MAXN];
queue<int> bfsq;
void dfs(int node,int pret)
{
    nodes[brkomp].push_back(node);pos[node]=true;
    for (int sled:adj[node])
    {
        if (sled!=pret) dfs(sled,node);
    }
}
void bfs(int komp,int pret)
{
    for (int node:nodes[komp]) dist[node]=INT_MAX;
    dist[pret]=0;bfsq.push(pret);
    while (!bfsq.empty())
    {
        int node=bfsq.front();bfsq.pop();
        for (int sled:adj[node])
        {
            if (dist[sled]!=INT_MAX) continue;
            dist[sled]=dist[node]+1;bfsq.push(sled);
        }
    }
}
int main()
{
    cin>>n>>m;int ans=0;
    for (int i=1;i<=m;i++) {int x,y;cin>>x>>y;adj[x].push_back(y);adj[y].push_back(x);}
    for (int node=1;node<=n;node++)
    {
        if (!pos[node]) {brkomp++;dfs(node,0);}
    }
    for (int komp=1;komp<=brkomp;komp++)
    {
        bfs(komp,nodes[komp][0]);int maxdist=0,maxnode=nodes[komp][0];
        for (int node:nodes[komp])
        {
            if (dist[node]>maxdist) {maxdist=dist[node];maxnode=node;}
        }
        bfs(komp,maxnode);maxdist=0;
        for (int node:nodes[komp]) maxdist=max(maxdist,dist[node]);
        ans+=maxdist+1;
    }
    cout<<ans<<endl;
}
| # | 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... |