Submission #757254

# Submission time Handle Problem Language Result Execution time Memory
757254 2023-06-12T21:33:33 Z shjgkwo Duathlon (APIO18_duathlon) C++17
0 / 100
211 ms 54740 KB
#include <algorithm>
#include <iostream>
#include <map>
#include <set>
#include <stack>
#include <vector>

using namespace std;

const int MAXN = 100010;

vector<int> edge[MAXN];

map<int, int> bcce[MAXN];

int bcc_cnt = 0;

int pre_cnt = 0;
int pre[MAXN];
int low[MAXN];
int mypar[MAXN];
int is_sep[MAXN];

long long sum_perm_cnt = 0;
long long node_cnt[MAXN];
long long p[MAXN * 2];

set<int> bcc_node[MAXN * 2];

stack<pair<int, int> > st;

long long ans = 0;

inline const long long nP3(long long n) {
    return n * (n - 1) * (n - 2);
}

inline const long long nP2(long long n) {
    return n * (n - 1);
}

void dfs(int u, int par) {
    int child = 0, flag = 0;
    mypar[u] = par;
    node_cnt[u] = 1;
    low[u] = pre[u] = ++pre_cnt;
    for(auto &v: edge[u]) {
        if(v == par) continue;
        if(!pre[v]) {
            child++;
            st.push({u, v});
            dfs(v, u);
            node_cnt[u] += node_cnt[v];
            low[u] = min(low[u], low[v]);
            if(pre[u] <= low[v]) {
                bcc_cnt++;
                flag = 1;
                while(st.size() && (st.top().first != u || st.top().second != v)) {
                    int x = st.top().first;
                    int y = st.top().second;
                    bcc_node[bcc_cnt].insert(x);
                    bcc_node[bcc_cnt].insert(y);
                    bcce[x][y] = bcc_cnt;
                    bcce[y][x] = bcc_cnt;
                    st.pop();
                }
                if(st.size()) {
                    int x = st.top().first;
                    int y = st.top().second;
                    bcc_node[bcc_cnt].insert(x);
                    bcc_node[bcc_cnt].insert(y);
                    bcce[x][y] = bcc_cnt;
                    bcce[y][x] = bcc_cnt;
                    st.pop();
                }
                ans += nP3(bcc_node[bcc_cnt].size());
                p[bcc_cnt] = nP2(bcc_node[bcc_cnt].size() - 1);
            }
        }
        else if(pre[u] > pre[v]) {
            st.push({u, v});
            low[u] = min(low[u], pre[v]);
        }
    }
    if(child >= 2 && par == -1) is_sep[u] = 1;
    else if(flag && par != -1) is_sep[u] = 1;
}

int chk[MAXN];

void solve(int u, int par) {
    long long sum_node_cnt = node_cnt[1] - node_cnt[u];
    chk[u] = 1;
    long long sep = is_sep[u];

    for (auto &v: edge[u]) {
        if(chk[v]) continue;
        solve(v, u);
        ans += sep * sum_node_cnt * node_cnt[v] * 2;
        sum_node_cnt += node_cnt[v];
    }
    
    if(!sep) {
        return;
    }

    for(auto &v: edge[u]) {
        if(par != v && mypar[v] != u) continue;
        int bcc = bcce[u][v];
        if(par != v) {
            ans += (node_cnt[1] - node_cnt[v] - 1) * p[bcc] * 2;
        }
        else {
            ans += (node_cnt[1] - node_cnt[u]) * p[bcc] * 2;
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int n, m; cin >> n >> m;
    for(int i = 0; i < m; i++) {
        int x, y; cin >> x >> y;
        edge[x].push_back(y);
        edge[y].push_back(x);
    }
    dfs(1, 0);
    solve(1, 0);
    cout << ans << "\n";
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 10 ms 16804 KB Output is correct
2 Correct 10 ms 16696 KB Output is correct
3 Correct 9 ms 16760 KB Output is correct
4 Correct 9 ms 16724 KB Output is correct
5 Correct 9 ms 16724 KB Output is correct
6 Correct 9 ms 16780 KB Output is correct
7 Incorrect 9 ms 16724 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 10 ms 16804 KB Output is correct
2 Correct 10 ms 16696 KB Output is correct
3 Correct 9 ms 16760 KB Output is correct
4 Correct 9 ms 16724 KB Output is correct
5 Correct 9 ms 16724 KB Output is correct
6 Correct 9 ms 16780 KB Output is correct
7 Incorrect 9 ms 16724 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 174 ms 54740 KB Output is correct
2 Correct 211 ms 54712 KB Output is correct
3 Incorrect 109 ms 39068 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 11 ms 16980 KB Output is correct
2 Correct 10 ms 17048 KB Output is correct
3 Correct 12 ms 16980 KB Output is correct
4 Correct 10 ms 17108 KB Output is correct
5 Correct 10 ms 17108 KB Output is correct
6 Correct 11 ms 17040 KB Output is correct
7 Correct 10 ms 17048 KB Output is correct
8 Correct 10 ms 17108 KB Output is correct
9 Correct 13 ms 17044 KB Output is correct
10 Incorrect 10 ms 16852 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 145 ms 43508 KB Output is correct
2 Correct 145 ms 43560 KB Output is correct
3 Correct 147 ms 43468 KB Output is correct
4 Correct 148 ms 43468 KB Output is correct
5 Correct 146 ms 43472 KB Output is correct
6 Correct 162 ms 52756 KB Output is correct
7 Correct 144 ms 49612 KB Output is correct
8 Correct 159 ms 48068 KB Output is correct
9 Correct 142 ms 46460 KB Output is correct
10 Incorrect 105 ms 35100 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 11 ms 17036 KB Output is correct
2 Correct 11 ms 16968 KB Output is correct
3 Incorrect 11 ms 16980 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 183 ms 43476 KB Output is correct
2 Correct 169 ms 43424 KB Output is correct
3 Incorrect 177 ms 44396 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 10 ms 16804 KB Output is correct
2 Correct 10 ms 16696 KB Output is correct
3 Correct 9 ms 16760 KB Output is correct
4 Correct 9 ms 16724 KB Output is correct
5 Correct 9 ms 16724 KB Output is correct
6 Correct 9 ms 16780 KB Output is correct
7 Incorrect 9 ms 16724 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 10 ms 16804 KB Output is correct
2 Correct 10 ms 16696 KB Output is correct
3 Correct 9 ms 16760 KB Output is correct
4 Correct 9 ms 16724 KB Output is correct
5 Correct 9 ms 16724 KB Output is correct
6 Correct 9 ms 16780 KB Output is correct
7 Incorrect 9 ms 16724 KB Output isn't correct
8 Halted 0 ms 0 KB -