Submission #48872

#TimeUsernameProblemLanguageResultExecution timeMemory
48872IvanC철인 이종 경기 (APIO18_duathlon)C++17
31 / 100
263 ms22888 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> ii; const int MAXN = 1e5 + 10; vector<int> grafo[MAXN],arvore[MAXN]; int N,M,e1[2*MAXN],e2[2*MAXN],isbridge[2*MAXN],num[MAXN],low[MAXN],dfsCount,treeComp,bridgeTreeId[MAXN],bridge_sz[MAXN],sz[MAXN],block[MAXN]; ll tot,comp_size; void dfs_tarjan(int v,int p){ num[v] = low[v] = ++dfsCount; for(int i = 0;i<grafo[v].size();i++){ int idx = grafo[v][i]; int u = (e1[idx] != v) ? e1[idx] : e2[idx]; if(u == p) continue; if(num[u] == 0){ dfs_tarjan(u,v); if(low[u] > num[v]) isbridge[idx] = 1; low[v] = min(low[v],low[u]); } else{ low[v] = min(low[v],num[u]); } } } void dfs_bridge(int v,int p,int compId){ if(compId == -1) compId = ++treeComp; bridgeTreeId[v] = compId; for(int i = 0;i<grafo[v].size();i++){ int idx = grafo[v][i]; int u = (e1[idx] != v) ? e1[idx] : e2[idx]; if(u == p || bridgeTreeId[u]) continue; if(isbridge[idx]){ dfs_bridge(u,v,-1); arvore[bridgeTreeId[v]].push_back(bridgeTreeId[u]); arvore[bridgeTreeId[u]].push_back(bridgeTreeId[v]); } else{ dfs_bridge(u,v,compId); } } } void dfs_tree_1(int v,int p){ block[v] = 1; sz[v] = bridge_sz[v]; for(int u : arvore[v]){ if(u == p) continue; dfs_tree_1(u,v); sz[v] += sz[u]; } } void dfs_tree_2(int v,int p){ tot += 1LL*(bridge_sz[v])*max(bridge_sz[v] - 1,0)*max(bridge_sz[v]-2,0); vector<int> filhos; for(int u : arvore[v]){ if(u == p) continue; filhos.push_back(sz[u]); dfs_tree_2(u,v); } filhos.push_back(comp_size - sz[v]); for(int i = 0;i<filhos.size();i++){ int sub_arvore = filhos[i]; tot += 1LL*bridge_sz[v]*sub_arvore*(comp_size - sub_arvore - bridge_sz[v]); tot += 2LL*sub_arvore*(bridge_sz[v] - 1)*max(bridge_sz[v] - 2,0); tot += 2LL*sub_arvore*(bridge_sz[v] - 1); } } int main(){ scanf("%d %d",&N,&M); for(int i = 1;i<=M;i++){ scanf("%d %d",&e1[i],&e2[i]); grafo[e1[i]].push_back(i); grafo[e2[i]].push_back(i); } for(int i = 1;i<=N;i++){ if(num[i] == 0){ dfs_tarjan(i,-1); dfs_bridge(i,-1,-1); } } for(int i = 1;i<=N;i++) bridge_sz[bridgeTreeId[i]]++; for(int i = 1;i<=treeComp;i++){ if(block[i]) continue; dfs_tree_1(i,-1); comp_size = sz[i]; dfs_tree_2(i,-1); } printf("%lld\n",tot); return 0; }

Compilation message (stderr)

count_triplets.cpp: In function 'void dfs_tarjan(int, int)':
count_triplets.cpp:16:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0;i<grafo[v].size();i++){
                ~^~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'void dfs_bridge(int, int, int)':
count_triplets.cpp:33:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0;i<grafo[v].size();i++){
                ~^~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'void dfs_tree_2(int, int)':
count_triplets.cpp:67:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0;i<filhos.size();i++){
                ~^~~~~~~~~~~~~~
count_triplets.cpp: In function 'int main()':
count_triplets.cpp:76:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&N,&M);
  ~~~~~^~~~~~~~~~~~~~~
count_triplets.cpp:79:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&e1[i],&e2[i]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...