Submission #1059613

#TimeUsernameProblemLanguageResultExecution timeMemory
1059613vjudge1Duathlon (APIO18_duathlon)C++17
90 / 100
576 ms1048576 KiB
#include<bits/stdc++.h> using namespace std; struct DDS{ int par[1<<18]; int abp(int n){ return par[n]?par[n]=abp(par[n]):n; } void merge(int a,int b){ a=abp(a),b=abp(b); if(a-b)par[a]=b; } } dsu; vector<int>adj[1<<17],adj2[1<<18]; set<pair<int,int>>st[1<<17]; int par[1<<17],dep[1<<17],cycpar[1<<17],CC,N,N2; long long sz[1<<17]; void dfsC(int n,int p){ N++; dep[n]=dep[p]+1; par[n]=p; for(auto i:adj[n]){ if(i==p)continue; if(!dep[i]) dfsC(i,n); else if(dep[i]<dep[n]) st[n].insert({dep[i],++CC}); } } void dfsM(int n,int p){ for(auto i:adj[n]) { if(par[i]-n)continue; dfsM(i,n); if(st[i].empty())continue; if(st[i].begin()->first<dep[n]) { if(st[n].size()) dsu.merge(st[i].begin()->second,st[n].begin()->second); st[n].insert(*st[i].begin()); } else adj2[n].push_back(dsu.abp(st[i].begin()->second)); } if(st[n].size()) cycpar[n]=st[n].begin()->second; else adj2[p].push_back(n); } void dfsP(int n,int p){ for(auto i:adj[n]) if(par[i]==n) dfsP(i,n); if(cycpar[n]) adj2[dsu.abp(cycpar[n])].push_back(n); } long long TOT; void dfsA(int n){ sz[n]=n<=N2; long long k=(1ll*N-sz[n])*(N-sz[n]); for(auto i:adj2[n])dfsA(i), sz[n]+=sz[i],k-=sz[i]*1ll*sz[i]; k-=(1ll*N-sz[n])*(N-sz[n]); if(n>N2)k*=adj2[n].size()-1; TOT+=k; } int main(){ cin.tie(0)->sync_with_stdio(0); int n,m; cin>>n>>m; for(int i=0;i<m;i++){ int a,b;cin>>a>>b; adj[a].push_back(b); adj[b].push_back(a); } CC=N2=n; for(int K=1;K<=n;K++) { if(dep[K])continue; N=0; dfsC(K,0); dfsM(K,0); dfsP(K,0); dfsA(K); } cout<<TOT<<'\n'; }
#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...