Submission #698630

#TimeUsernameProblemLanguageResultExecution timeMemory
698630vjudge1Duathlon (APIO18_duathlon)C++17
0 / 100
102 ms27084 KiB
#include<bits/stdc++.h> #define maxn 200500 using namespace std; int n,m; vector<int> g[maxn]; bool vis[maxn]; int disc[maxn]; int low[maxn]; bool br[maxn]; int par[maxn]; int cnt[maxn]; int ct=0; vector<int> b[maxn]; int sz[maxn]; void dfs(int u,int p=-1) { vis[u]=true; disc[u]=low[u]=ct++; sz[u]=1; for(auto v:g[u]) { if(!vis[v]) { dfs(v,u); sz[u]+=sz[v]; par[v]=u; low[u]=min(low[u],low[v]); if(low[v]>disc[u]) { br[v]=true; } } else { if(v!=p) low[u]=min(low[u],disc[v]); } } } void dfs_2(int u,int cur=1) { vis[u]=true; if(br[u]) cur=u; for(auto v:g[u]) { if(!vis[v]) { if(br[v]) b[cur].push_back(v); dfs_2(v,cur); } } } void dfs_3(int u) { cnt[u]=sz[u]; for(auto v:b[u]) { cnt[u]-=sz[v]; dfs_3(v); } } long long ans=0; void dfs_4(int u) { int pc=n-sz[u]; vector<int> szs; if(pc!=0) szs.push_back(pc); for(auto v:b[u]) szs.push_back(sz[v]); ans = ans+1ll*cnt[u]*(cnt[u]-1)*(cnt[u]-2); for(auto s:szs) { if(cnt[u]>=2) { ans=ans+2ll*(cnt[u]-1)*(cnt[u]-2)*s; ans=ans+2ll*(cnt[u]-1)*s; } ans=ans+1ll*cnt[u]*s*(n-s-cnt[u]); } for(auto v:b[u]) dfs_4(v); } int main() { scanf("%d %d",&n,&m); for(int i=0;i<m;i++) { int u,v; scanf("%d %d",&u,&v); g[u].push_back(v); g[v].push_back(u); } dfs(1); for(int i=1;i<=n;i++) vis[i]=false; dfs_2(1); dfs_3(1); dfs_4(1); printf("%lld",ans); return 0; }

Compilation message (stderr)

count_triplets.cpp: In function 'int main()':
count_triplets.cpp:68:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |     scanf("%d %d",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~~
count_triplets.cpp:71:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |         scanf("%d %d",&u,&v);
      |         ~~~~~^~~~~~~~~~~~~~~
#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...