제출 #1174161

#제출 시각아이디문제언어결과실행 시간메모리
1174161Muhammet철인 이종 경기 (APIO18_duathlon)C++20
23 / 100
1110 ms1114112 KiB
#include "bits/stdc++.h"

using namespace std;
 
#define ll long long
#define SZ(s) (int)s.size()

const int N = 2e5 + 5;
const int M = 1e9 + 7;

int n, m, vis[N];

vector <int> v[N];

ll ans, cnt, a[N];

void dfs(int x, int y) {
    cnt++;
    a[x] = vis[x] = 1;
    for(auto i : v[x]) {
        if(i == y) continue;
        dfs(i, x);
        a[x] += a[i];
    }
}

void f(int x, int y, ll z) {
    ans -= ((z * (z - 1)) / 2);
    ll s = 0;
    for(auto i : v[x]) {
        if(i == y) continue;
        ans -= ((a[i] * (a[i] - 1)) / 2);
        s += a[i];
    }
    for(auto i : v[x]) {
        if(i != y) f(i, x, z + s - a[i] + 1);
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);

    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
        int u1, u2;
        cin >> u1 >> u2;
        v[u1].push_back(u2);
        v[u2].push_back(u1);
    }

    for(int i = 1; i <= n; i++) {
        if(vis[i]) continue;
        cnt = 0;
        dfs(i, 0);
        ans += (cnt * ((cnt - 2) * (cnt - 1)) / 2);
        f(i, 0, 0);
    }

    cout << ans * 2 << '\n';

    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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...