답안 #407819

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
407819 2021-05-19T04:43:02 Z talant117408 철인 이종 경기 (APIO18_duathlon) C++17
10 / 100
1000 ms 27124 KB
/*
    Code written by Talant I.D.
*/
 
#include <bits/stdc++.h>
//~ #include <ext/pb_ds/assoc_container.hpp>
 
//~ using namespace __gnu_pbds;
using namespace std;
 
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
//~ typedef tree <int, null_type, less <int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
 
#define precision(n) fixed << setprecision(n)
#define pb push_back
#define ub upper_bound
#define lb lower_bound
#define mp make_pair
#define eps (double)1e-9
#define PI 2*acos(0.0)
//~ #define endl "\n"
#define sz(v) int((v).size())
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define do_not_disturb ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define OK cout << "OK" << endl;
 
const int mod = 1e9+7;
 
ll mode(ll a) {
    while (a < 0) {
        a += mod;
    }
    return a % mod;
}
 
ll subt(ll a, ll b) {
    return mode(mode(a)-mode(b));
}
 
ll add(ll a, ll b) {
    return mode(mode(a)+mode(b));
}
 
ll mult(ll a, ll b) {
    return mode(mode(a)*mode(b));
}
 
ll binpow(ll a, ll b) {
    ll res = 1;
    while (b) {
        if (b&1) res = mult(res, a);
        a = mult(a, a);
        b >>= 1;
    }
    return res;
}

const int N = 1e5+7;
vector <int> graph[N], comps_graph[N];
map <pii, bool> isBridge;
int timer, ind[N], fup[N], tin[N], used[N];
ll dp[N], ans, val[N], subtree[N];
int n, m, compsn;

void find_bridges(int v, int p = -1) {
    used[v] = 1;
    tin[v] = fup[v] = ++timer;
    for (auto to : graph[v]) {
        if (to == p) {
            continue;
        }
        if (used[to]) {
            fup[v] = min(fup[v], tin[to]);
        }
        else {
            find_bridges(to, v);
            fup[v] = min(fup[v], fup[to]);
            if (fup[to] > tin[v]) {
                isBridge[mp(v, to)] = isBridge[mp(to, v)] = 1;
            }
        }
    }
}

void find_comps(int v, int p = -1) {
    used[v] = 1;
    ind[v] = timer;
    for (auto to : graph[v]) {
        if (to == p) {
            continue;
        }
        if (isBridge[mp(to, v)]) {
            continue;
        }
        if (!used[to]) {
            find_comps(to, v);
        }
    }
}

void dfs(int v, int p = -1) {
    used[v] = 1;
    subtree[v] = val[v];
    for (auto to : comps_graph[v]) {
        if (to == p) {
            continue;
        }
        dfs(to, v);
        subtree[v] += subtree[to];
    }
}

int main() {
    do_not_disturb
    
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int x, y;
        cin >> x >> y;
        graph[x].pb(y);
        graph[y].pb(x);
    }
    
    for (int i = 1; i <= n; i++) {
        if (!used[i]) {
            find_bridges(i);
        }
    }
    
    for (int i = 1; i <= n; i++) {
        used[i] = 0;
    }
    timer = 0;
    
    for (int i = 1; i <= n; i++) {
        if (!used[i]) {
            timer++;
            find_comps(i);
        }
    }
    compsn = timer;
    
    for (int i = 1; i <= n; i++) {
        val[ind[i]]++;
        for (auto to : graph[i]) {
            if (ind[to] != ind[i]) {
                comps_graph[ind[to]].pb(ind[i]);
            }
        }
    }
    
    for (int i = 1; i <= compsn; i++) {
        for (int j = 1; j <= compsn; j++) {
            used[j] = 0;
        }
        dfs(i);
        for (int j = 1; j <= compsn; j++) {
            if (!used[j]) {
                continue;
            }
            if (j == i) {
                ans += (val[i]-1)*(val[i]-1)*(subtree[i]-val[i]);
                ans += (val[i])*(val[i]-1)*(val[i]-2);
            }
            else { 
                ans += val[i]*val[j]*(subtree[j]-val[j]);
                ans += val[i]*(val[j]-1)*(val[j]-1);
            }
        }
    }
    
    cout << ans;
    
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 4992 KB Output is correct
2 Correct 4 ms 4960 KB Output is correct
3 Correct 4 ms 4940 KB Output is correct
4 Correct 5 ms 4960 KB Output is correct
5 Correct 5 ms 5044 KB Output is correct
6 Correct 4 ms 4940 KB Output is correct
7 Incorrect 4 ms 4940 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 4992 KB Output is correct
2 Correct 4 ms 4960 KB Output is correct
3 Correct 4 ms 4940 KB Output is correct
4 Correct 5 ms 4960 KB Output is correct
5 Correct 5 ms 5044 KB Output is correct
6 Correct 4 ms 4940 KB Output is correct
7 Incorrect 4 ms 4940 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 221 ms 26892 KB Output is correct
2 Correct 236 ms 26924 KB Output is correct
3 Execution timed out 1084 ms 26860 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 5268 KB Output is correct
2 Correct 29 ms 5240 KB Output is correct
3 Correct 28 ms 5240 KB Output is correct
4 Correct 36 ms 5324 KB Output is correct
5 Correct 32 ms 5196 KB Output is correct
6 Correct 32 ms 5300 KB Output is correct
7 Correct 32 ms 5324 KB Output is correct
8 Correct 30 ms 5284 KB Output is correct
9 Correct 31 ms 5288 KB Output is correct
10 Correct 23 ms 5264 KB Output is correct
11 Correct 21 ms 5268 KB Output is correct
12 Correct 16 ms 5196 KB Output is correct
13 Correct 11 ms 5196 KB Output is correct
14 Correct 9 ms 5196 KB Output is correct
15 Correct 6 ms 5196 KB Output is correct
16 Correct 5 ms 5068 KB Output is correct
17 Correct 17 ms 5276 KB Output is correct
18 Correct 20 ms 5268 KB Output is correct
19 Correct 16 ms 5284 KB Output is correct
20 Correct 17 ms 5196 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1089 ms 27124 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 5240 KB Output is correct
2 Correct 29 ms 5244 KB Output is correct
3 Incorrect 16 ms 5196 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1076 ms 27084 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 4992 KB Output is correct
2 Correct 4 ms 4960 KB Output is correct
3 Correct 4 ms 4940 KB Output is correct
4 Correct 5 ms 4960 KB Output is correct
5 Correct 5 ms 5044 KB Output is correct
6 Correct 4 ms 4940 KB Output is correct
7 Incorrect 4 ms 4940 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 4992 KB Output is correct
2 Correct 4 ms 4960 KB Output is correct
3 Correct 4 ms 4940 KB Output is correct
4 Correct 5 ms 4960 KB Output is correct
5 Correct 5 ms 5044 KB Output is correct
6 Correct 4 ms 4940 KB Output is correct
7 Incorrect 4 ms 4940 KB Output isn't correct
8 Halted 0 ms 0 KB -