Submission #733623

#TimeUsernameProblemLanguageResultExecution timeMemory
733623bin9638Duathlon (APIO18_duathlon)C++17
0 / 100
8 ms9684 KiB
#include <bits/stdc++.h> using namespace std; #define N 200010 #define ll long long #define fs first #define sc second #define ii pair<int,int> #define pb push_back int ans=0,times,num[N],low[N],n,m,ktr[N],dem,sz[N],child[N]; vector<int>g[N],edge[N]; stack<int>st; void visit(int u,int p) { num[u]=low[u]=++times; for(auto v:g[u]) if(v!=p) { if(num[v]!=0) { low[u]=min(low[u],num[v]); }else { st.push(u); visit(v,u); low[u]=min(low[u],low[v]); if(low[v]>=num[u]) { int k; dem++; do{ k=st.top(); st.pop(); if(ktr[k]!=dem) { sz[dem]++; ktr[k]=dem; edge[dem].pb(k); edge[k].pb(dem); } }while(k!=u); } } } st.push(u); } void build(int u,int p) { child[u]=(u<=n); //cout<<u<<" "<<child[u]<<endl; for(auto v:edge[u]) if(v!=p) { build(v,u); child[u]+=child[v]; } } void DFS(int u,int p) { if(u<=n) { int sum=n-1; for(auto v:edge[u]) if(v!=p) { sum-=child[v]; ans+=sum*child[v]; // cout<<sum<<" "<<child[v]<<endl; } }else { int sum=n; for(auto v:edge[u]) if(v!=p) { sum-=child[v]; ans+=sum*child[v]*(sz[u]-2); // cout<<u<<" "<<sum<<" "<<child[v]<<" "<<sz[u]<<endl; } } //cout<<u<<" "<<ans*2<<endl; for(auto v:edge[u]) if(v!=p) DFS(v,u); } int32_t main() { freopen("A.inp","r",stdin); freopen("A.out","w",stdout); ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); cin>>n>>m; for(int i=1;i<=m;i++) { int u,v; cin>>u>>v; g[u].pb(v); g[v].pb(u); } dem=n; for(int i=1;i<=n;i++) if(num[i]==0) visit(i,0); //cout<<dem<<endl; build(1,0); // cout<<child[1]<<endl; DFS(1,0); cout<<ans*2; return 0; }

Compilation message (stderr)

count_triplets.cpp: In function 'int32_t main()':
count_triplets.cpp:95:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   95 |     freopen("A.inp","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~
count_triplets.cpp:96:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |     freopen("A.out","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~
#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...