제출 #1188217

#제출 시각아이디문제언어결과실행 시간메모리
1188217irmuun철인 이종 경기 (APIO18_duathlon)C++20
100 / 100
62 ms28604 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()

const int N=1e5+5;

int n,m,now=0,cnt,num;
int tin[N],low[N],sz[2*N],wgh[2*N];
vector<int>g[N],f[2*N],stk;
ll ans=0;

void Tarjan(int u){
    low[u]=tin[u]=++now;
    stk.pb(u);
    num++;
    for(int v:g[u]){
        if(tin[v]==0){
            Tarjan(v);
            low[u]=min(low[u],low[v]);
            if(low[v]==tin[u]){
                cnt++;
                wgh[cnt]=0;
                for(int x=0;x!=v;){
                    x=stk.back();
                    f[cnt].pb(x);
                    f[x].pb(cnt);
                    stk.pop_back();
                    wgh[cnt]++;
                }
                f[cnt].pb(u);
                f[u].pb(cnt);
                wgh[cnt]++;
            }
        }
        else{
            low[u]=min(low[u],tin[v]);
        }
    }
}

void dfs(int u,int p){
    sz[u]=(u<=n);
    for(int v:f[u]){
        if(v!=p){
            dfs(v,u);
            ans+=2ll*wgh[u]*sz[u]*sz[v];
            sz[u]+=sz[v];
        }
    }
    ans+=2ll*wgh[u]*sz[u]*(num-sz[u]);
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin>>n>>m;
    fill(wgh+1,wgh+n+1,-1);
    cnt=n;
    for(int i=1;i<=m;i++){
        int u,v;
        cin>>u>>v;
        g[u].pb(v);
        g[v].pb(u);
    }
    for(int i=1;i<=n;i++){
        if(tin[i]==0){
            num=0;
            Tarjan(i);
            stk.pop_back();
            dfs(i,0);
        }
    }
    cout<<ans;
}
#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...