제출 #982210

#제출 시각아이디문제언어결과실행 시간메모리
982210Faisal_Saqib철인 이종 경기 (APIO18_duathlon)C++17
23 / 100
1056 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=1e5+10; vector<int> ma[N]; bool vis[N]; ll ans=0,sz[N],dp[N],dp_[N]; void dfs(int x,int p=-1) { sz[x]=1; vis[x]=1; for(auto y:ma[x]) { if(y!=p) { dfs(y,x); sz[x]+=sz[y]; dp[x]-=(sz[y]*sz[y]); } } dp[x]+=((sz[x]-1)*(sz[x]-1)); } void ChangeRoot(int x,int y) { // dp[x]+=(sz[y]*sz[y]); dp[x]-=((sz[x]-1)*(sz[x]-1)); dp[y]-=((sz[y]-1)*(sz[y]-1)); sz[x]-=sz[y]; sz[y]+=sz[x]; dp[x]+=((sz[x]-1)*(sz[x]-1)); dp[y]+=((sz[y]-1)*(sz[y]-1)); dp[y]-=(sz[x]*sz[x]); } void dfs_(int x,int p=-1) { vis[x]=1; ans+=dp[x]; for(auto y:ma[x]) { if(y!=p) { ChangeRoot(x,y); dfs_(y,x); ChangeRoot(y,x); } } } void solve() { int n,m; cin>>n>>m; for(int j=0;j<m;j++) { int x,y; cin>>x>>y; ma[x].push_back(y); ma[y].push_back(x); } for(int i=1;i<=n;i++) { if(!vis[i]) { dfs(i); } } for(int i=1;i<=n;i++) vis[i]=0; for(int i=1;i<=n;i++) { if(!vis[i]) { dfs_(i); } } cout<<ans<<endl; } int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); solve(); }
#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...