Submission #1327246

#TimeUsernameProblemLanguageResultExecution timeMemory
1327246Zone_zoneeCijanobakterije (COCI21_cijanobakterije)C++20
15 / 70
27 ms7648 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;

int deg[N];
struct info{
    int f, s;
    info(): f(1), s(1){};
    info(int _f, int _s): f(_f), s(_s){};
    void push(int x){
        s = max(s, x);
        if(f < s) swap(f, s);
    }
    int len(){
        return f+s;
    }
} dp[N];
bool vis[N];
int cnt;
int comp[N], best[N];
vector<int> adj[N];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    cin >> n >> m;
    while(m--){
        int u, v;
        cin >> u >> v;
        deg[u]++;
        deg[v]++;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    queue<int> q;
    for(int i = 1; i <= n; ++i){
        if(vis[i]) continue;
        cnt++;
        q.push(i);
        vis[i] = 1;
        while(!q.empty()){
            int u = q.front(); q.pop();
            comp[u] = cnt;
            for(int v : adj[u]){
                if(vis[v]) continue;
                vis[v] = 1;
                q.push(v);
            }
        }
    }
    for(int i = 1; i <= n; ++i){
        if(deg[i] == 1){
            q.push(i);
        }
    }
    while(!q.empty()){
        int u = q.front(); q.pop();
        // cerr << "Node : " << u << '\n';
        for(auto v : adj[u]){
            dp[u].push(dp[v].f+1);
            if(--deg[v] == 1) q.push(v);
        }
    }
    for(int i = 1; i <= n; ++i){
        // cerr << "dbg : " << dp[i].f << " " << dp[i].s << '\n';
        best[comp[i]] = max(best[comp[i]], dp[i].len() - 3);
    }
    int res = 0;
    for(int i = 1; i <= cnt; ++i){
        res += best[cnt];
    }
    cout << res << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...