Submission #1352821

#TimeUsernameProblemLanguageResultExecution timeMemory
1352821DanerZein철인 이종 경기 (APIO18_duathlon)C++20
0 / 100
1120 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;
typedef long long ll;
const int MAX_N=1e5+10;

vector<vi> G;

int sub[MAX_N];
int acum[MAX_N];
int ans[MAX_N];
int n;
void dfs(int u,int p){
  sub[u]=1;
  for(auto &v:G[u]){
    if(v!=p){
      dfs(v,u);
      sub[u]+=sub[v];
      acum[u]+=acum[v];
    }
  }
  ans[u]+=2*acum[u];
  acum[u]+=(sub[u]-1);
  for(auto &v:G[u]){
    if(v!=p){
      ans[u]+=sub[v]*(n-sub[v]-1);
    }
  }
}

int main(){
  int m; cin>>n>>m;
  G.resize(n);
  for(int i=0;i<m;i++){
    int a,b; cin>>a>>b;
    a--; b--;
    G[a].push_back(b);
    G[b].push_back(a);
  }
  memset(acum,0,sizeof acum);
  dfs(0,0);
  ll res=0;
  for(int i=0;i<n;i++){
    res+=ans[i];
  }
  cout<<res<<endl;
}
#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...