제출 #1362047

#제출 시각아이디문제언어결과실행 시간메모리
1362047po_rag526철인 이종 경기 (APIO18_duathlon)C++20
31 / 100
36 ms13724 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=1e5+5,MAXA=1e6+5,inf=2e9+5,MOD=982451653;
vector<int> adj[N];
int low[N],depth[N],C,sz[N],ans=0,n;
bool cycle=0;
void dfs(int node,int par){
    depth[node]=depth[par]+1;
    sz[node]=1;
    for(auto i:adj[node]){
        if(i==par)continue;
        if(!depth[i]){
            dfs(i,node);
            sz[node]+=sz[i];
        }
        else cycle=1;
    }
}
void dfs2(int node){
    int sum=0;
    for(auto i:adj[node]){
        if(depth[i]==depth[node]+1){
            dfs2(i);
            ans+=sum*sz[i]*2;
            sum+=sz[i];
        }
    }
    ans+=(sz[node]-1)*(sz[C]-sz[node])*2;
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int m; cin>>n>>m;
    for(int i=0;i<m;i++){
        int x,y; cin>>x>>y;
        adj[x].pb(y); adj[y].pb(x);
    }
    for(int i=1;i<=n;i++){
        if(!depth[i]){
            C=i; cycle=0;
            dfs(i,0);
            if(cycle)ans+=sz[C]*(sz[C]-1)*(sz[C]-2);
            else dfs2(i);
        }
    }
    cout<<ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…