Submission #85995

#TimeUsernameProblemLanguageResultExecution timeMemory
85995fedoseevtimofeyDuathlon (APIO18_duathlon)C++14
23 / 100
101 ms33240 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;

const int N = 1e5 + 7;

vector <int> g[N];
int cnt[N];
bool used[N];
int sz[N];
int cmp[N];
int par[N];

int x = 0;

void dfs(int u, int p = -1) {
    par[u] = p;
    used[u] = 1;
    cmp[u] = x;
    ++sz[x];
    cnt[u] = 1;
    for (auto v : g[u]) {
        if (!used[v]) {
            dfs(v, u);
            cnt[u] += cnt[v];
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0); cout.setf(ios::fixed); cout.precision(20);
    #ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < m; ++i) {
        int u, v;
        cin >> u >> v;
        --u, --v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    for (int i = 0; i < n; ++i) {
        if (!used[i]) {
            ++x;
            dfs(i);
        }
    }
    ll ans = 0;
    for (int i = 0; i < n; ++i) {
        vector <int> curs;
        int have = 0;
        for (auto j : g[i]) {
            if (j == par[i]) continue;
            curs.push_back(cnt[j]);
            have += cnt[j];
        }
        curs.push_back(sz[cmp[i]] - have - 1);
        have = sz[cmp[i]] - 1;
        for (auto i : curs) {
            ans += (ll)i * (have - i);
        }
    }
    cout << ans << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...