Submission #743330

# Submission time Handle Problem Language Result Execution time Memory
743330 2023-05-17T09:52:30 Z alvingogo Duathlon (APIO18_duathlon) C++14
31 / 100
142 ms 49396 KB
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define AquA cin.tie(0);ios_base::sync_with_stdio(0);
#define fs first
#define sc second
#define p_q priority_queue
#define int long long
using namespace std;

/*
1. tarjan find BCC(vertex)

2. block-cut tree
type, size, subtree size

3. dp
we iterate c
square -> s, t aren't in the same subtree -> add to all the circle connecting to the square
circle -> s, t aren't in the same subtree


done?
*/

vector<vector<int> > e,bcc; 
vector<int> low,dfn,cv;
int cnt=0,cc=0,cr=0;
stack<int> st;
void tj(int r,int f){
    int sl=0;
    cnt++;
    dfn[r]=low[r]=cnt;
    st.push(r);
    for(auto h:e[r]){
        if(h!=f){
            if(!dfn[h]){
                tj(h,r);
                sl++;
                low[r]=min(low[r],low[h]);
                if(low[h]>=dfn[r]){
                    if(f!=-1){
                        if(!cv[r]){
                            cr++;
                            cv[r]=cr;
                        }
                    }
                    bcc.push_back(vector<int>());
                    while(st.top()!=r){
                        bcc[cc].push_back(st.top());
                        st.pop();
                    }
                    bcc[cc].push_back(st.top());
                    cc++;
                }
            }
            else{
                low[r]=min(low[r],dfn[h]);
            }
        }
    }
    if(f==-1 && sl>=2){
        cr++;
        cv[r]=cr;
    }
    if(f==-1){
        st.pop();
    }
}

struct no{
    vector<int> ch;
    int t=0,sq=0;
    long long tp=0;
    int sz=1;
    int vis=0;
};
vector<no> v;
long long ans=0;
int dfs3(int r,int f){
    v[r].vis=1;
    if(v[r].t){
        v[r].sz=v[r].sq;
    }
    int k=v[r].sz;
    for(auto h:v[r].ch){
        if(h!=f){
            k+=dfs3(h,r);
        }
    }
    return k;
}
void dfs(int r,int f,int n){
    for(auto h:v[r].ch){
        if(h!=f){
            dfs(h,r,n);
            v[r].sz+=v[h].sz;
            if(v[r].t){
                v[r].tp+=1ll*v[h].sz*(v[h].sz-1);
            }
        }
    }
    if(v[r].t){
        v[r].tp+=1ll*(n-v[r].sz)*(n-v[r].sz-1);
        ans-=1ll*v[r].sq*v[r].tp;
    }
}
void dfs2(int r,int f,int n){
    for(auto h:v[r].ch){
        if(h!=f){
            dfs2(h,r,n);
            if(!v[r].t){
                ans-=(v[h].tp-1ll*(n-v[h].sz)*(n-v[h].sz-1));
            }
        }
    }
    if(!v[r].t){
        ans-=(v[f].tp-1ll*(v[r].sz)*(v[r].sz-1));
    }
}
signed main(){
    AquA;
    int n;
    cin >> n;
    if(n<3){
        cout << 0 << "\n";
        return 0;
    }
    int m;
    cin >> m;
    e.resize(n);
    low.resize(n);
    dfn.resize(n);
    cv.resize(n);
    for(int i=0;i<m;i++){
        int a,b;
        cin >> a >> b;
        a--;
        b--;
        e[a].push_back(b);
        e[b].push_back(a);
    }
    for(int i=0;i<n;i++){
        if(!dfn[i]){
            tj(i,-1);
        }
    }
    int s=cc;
    for(int i=0;i<n;i++){
        if(cv[i]){
            s++;
        }
    }
    v.resize(s);
    for(int i=0;i<cc;i++){
        v[i].t=1;
        for(auto h:bcc[i]){
            if(cv[h]){
                v[i].ch.push_back(cv[h]+cc-1);
                v[cv[h]+cc-1].ch.push_back(i);
            }
            else{
                v[i].sq++;
            }
        }
    }
    for(int i=0;i<cc;i++){
        if(!v[i].vis){
            int k=dfs3(i,i);
            ans+=1ll*k*(k-1)*(k-2);
            dfs(i,i,k);
            dfs2(i,i,k);
        }
    }
    
    cout << ans << "\n";
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Incorrect 0 ms 212 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Incorrect 0 ms 212 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 73 ms 21016 KB Output is correct
2 Correct 70 ms 21068 KB Output is correct
3 Correct 82 ms 28420 KB Output is correct
4 Correct 66 ms 22956 KB Output is correct
5 Correct 91 ms 21952 KB Output is correct
6 Correct 97 ms 30648 KB Output is correct
7 Correct 118 ms 26136 KB Output is correct
8 Correct 99 ms 28704 KB Output is correct
9 Correct 107 ms 24640 KB Output is correct
10 Correct 83 ms 23412 KB Output is correct
11 Correct 70 ms 17704 KB Output is correct
12 Correct 65 ms 17548 KB Output is correct
13 Correct 66 ms 16460 KB Output is correct
14 Correct 54 ms 16384 KB Output is correct
15 Correct 41 ms 13840 KB Output is correct
16 Correct 36 ms 13716 KB Output is correct
17 Correct 4 ms 5076 KB Output is correct
18 Correct 4 ms 4948 KB Output is correct
19 Correct 3 ms 4948 KB Output is correct
20 Correct 3 ms 4948 KB Output is correct
21 Correct 3 ms 4948 KB Output is correct
22 Correct 4 ms 4948 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 596 KB Output is correct
3 Correct 1 ms 596 KB Output is correct
4 Correct 1 ms 724 KB Output is correct
5 Correct 1 ms 724 KB Output is correct
6 Correct 1 ms 596 KB Output is correct
7 Correct 1 ms 724 KB Output is correct
8 Correct 1 ms 596 KB Output is correct
9 Correct 1 ms 596 KB Output is correct
10 Correct 1 ms 596 KB Output is correct
11 Correct 2 ms 596 KB Output is correct
12 Correct 1 ms 596 KB Output is correct
13 Correct 1 ms 596 KB Output is correct
14 Correct 1 ms 468 KB Output is correct
15 Correct 1 ms 468 KB Output is correct
16 Correct 1 ms 468 KB Output is correct
17 Correct 1 ms 456 KB Output is correct
18 Correct 1 ms 592 KB Output is correct
19 Correct 1 ms 596 KB Output is correct
20 Correct 2 ms 468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 93 ms 28864 KB Output is correct
2 Correct 96 ms 30128 KB Output is correct
3 Correct 92 ms 30140 KB Output is correct
4 Correct 102 ms 30076 KB Output is correct
5 Correct 110 ms 30072 KB Output is correct
6 Correct 108 ms 49396 KB Output is correct
7 Correct 117 ms 37768 KB Output is correct
8 Correct 114 ms 35992 KB Output is correct
9 Correct 100 ms 34240 KB Output is correct
10 Correct 103 ms 30204 KB Output is correct
11 Correct 95 ms 30216 KB Output is correct
12 Correct 142 ms 30196 KB Output is correct
13 Correct 102 ms 30204 KB Output is correct
14 Correct 85 ms 27852 KB Output is correct
15 Correct 73 ms 25288 KB Output is correct
16 Correct 49 ms 17064 KB Output is correct
17 Correct 64 ms 25772 KB Output is correct
18 Correct 68 ms 25880 KB Output is correct
19 Correct 60 ms 26256 KB Output is correct
20 Correct 62 ms 25836 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 596 KB Output is correct
3 Incorrect 1 ms 584 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 97 ms 29016 KB Output is correct
2 Correct 106 ms 30900 KB Output is correct
3 Incorrect 101 ms 28536 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Incorrect 0 ms 212 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Incorrect 0 ms 212 KB Output isn't correct
8 Halted 0 ms 0 KB -