Submission #1160970

#TimeUsernameProblemLanguageResultExecution timeMemory
1160970achiCijanobakterije (COCI21_cijanobakterije)C++20
21 / 70
1093 ms7356 KiB
#include <bits/stdc++.h>

using namespace std;

vector<vector<int>> graph;
vector<int> links;

int bfs (int u, int V, int id, vector<int> &comp) {
    queue<int> q;
    vector<int> visited(V);
    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);
    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 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...