제출 #701522

#제출 시각아이디문제언어결과실행 시간메모리
701522Abrar_Al_Samit철인 이종 경기 (APIO18_duathlon)C++17
23 / 100
1082 ms1048576 KiB
#include<bits/stdc++.h>
using namespace std;
 
const int nax = 1e5 + 2;
 
vector<int>g[nax];
int n, m;
long long ans = 0;
bool vis[nax];
int sub[nax];
 
int dfs1(int v, int p) {
  sub[v] = 1;
  vis[v] = 1;
  for(int u : g[v]) if(u!=p) {
    sub[v] += dfs1(u, v);
  }
  return sub[v];
}
long long C(int n, int r) {
  if(n<r) return 0;

  long long ret = 1;
  for(int i=n-r+1; i<=n; ++i) {
    ret *= i;
  }
  for(int i=1; i<=r; ++i) {
    ret /= i;
  }
  return ret;
}
void dfs2(int v,int p, int r) {

  long long cur = C(sub[v]-1, 2);
  for(int u : g[v]) if(u!=p) {
    dfs2(u, v, r);

    cur -= C(sub[u], 2);
  }
  ans += cur;
  ans += (sub[v]-1) * 1LL * (sub[r] - sub[v]);
}
void PlayGround() {
  cin>>n>>m;
  for(int i=0; i<m; ++i) {
    int u, v;
    cin>>u>>v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
 
  for(int i=1; i<=n; ++i) if(!vis[i]) {
    dfs1(i, i);
    dfs2(i, i, i);
  }
  cout<<ans*2<<'\n';
 
  // cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  PlayGround();
  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...