제출 #733625

#제출 시각아이디문제언어결과실행 시간메모리
733625bin9638철인 이종 경기 (APIO18_duathlon)C++17
0 / 100
125 ms31240 KiB
#include <bits/stdc++.h> using namespace std; #define N 200010 #define ll long long #define fs first #define sc second #define ii pair<int,int> #define pb push_back ll ans=0; int times,num[N],low[N],n,m,ktr[N],dem,sz[N],child[N]; vector<int>g[N],edge[N]; stack<int>st; void visit(int u,int p) { num[u]=low[u]=++times; for(auto v:g[u]) if(v!=p) { if(num[v]!=0) { low[u]=min(low[u],num[v]); }else { st.push(u); visit(v,u); low[u]=min(low[u],low[v]); if(low[v]>=num[u]) { int k; dem++; do{ k=st.top(); st.pop(); if(ktr[k]!=dem) { sz[dem]++; ktr[k]=dem; edge[dem].pb(k); edge[k].pb(dem); } }while(k!=u); } } } st.push(u); } void build(int u,int p) { child[u]=(u<=n); //cout<<u<<" "<<child[u]<<endl; for(auto v:edge[u]) if(v!=p) { build(v,u); child[u]+=child[v]; } } void DFS(int u,int p) { if(u<=n) { int sum=n-1; for(auto v:edge[u]) if(v!=p) { sum-=child[v]; ans+=1ll*sum*child[v]; // cout<<sum<<" "<<child[v]<<endl; } }else { int sum=n; for(auto v:edge[u]) if(v!=p) { sum-=child[v]; ans+=1ll*sum*child[v]*(sz[u]-2); // cout<<u<<" "<<sum<<" "<<child[v]<<" "<<sz[u]<<endl; } } //cout<<u<<" "<<ans*2<<endl; for(auto v:edge[u]) if(v!=p) DFS(v,u); } int main() { #ifdef SKY freopen("A.inp","r",stdin); freopen("A.out","w",stdout); #endif // SKY ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); cin>>n>>m; for(int i=1;i<=m;i++) { int u,v; cin>>u>>v; g[u].pb(v); g[v].pb(u); } dem=n; for(int i=1;i<=n;i++) if(num[i]==0) visit(i,0); //cout<<dem<<endl; build(1,0); // cout<<child[1]<<endl; DFS(1,0); cout<<ans*2; return 0; }
#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...