Submission #172210

#TimeUsernameProblemLanguageResultExecution timeMemory
172210dndhkDuathlon (APIO18_duathlon)C++14
31 / 100
262 ms36980 KiB
#include <bits/stdc++.h> #define all(v) (v).begin(), (v).end() #define sortv(v) sort(all(v)) #define uniqv(v) (v).erase(unique(all(v)), (v).end()) #define pb push_back #define FI first #define SE second #define lb lower_bound #define ub upper_bound #define mp make_pair #define test 0 #define TEST if(test) using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<int> vi; const int MOD = 1000000007; // 998244353 const int INF = 2e9; const ll INFLL = 1e18; const int MAX_N = 100000; int N, M, NN; vector<int> gp[MAX_N+1]; int dfsn[MAX_N+1], up[MAX_N+1], p[MAX_N+1], cnt, pcnt=1; int sz2[MAX_N+1]; int vstt[MAX_N+1]; vector<int> v; void dfs(int x){ v.pb(x); vstt[x] = 1; sz2[x] = 1; dfsn[x] = up[x] = ++cnt; for(int i : gp[x]){ if(i==p[x]) continue; if(dfsn[i]==0){ p[i] = x; dfs(i); sz2[x]+=sz2[i]; up[x] = min(up[x], up[i]); }else{ up[x] = min(up[x], dfsn[i]); } } } vector<int> BCC[MAX_N+1]; vector<int> cl[MAX_N+1]; vector<pii> sz[MAX_N+1]; bool vst[MAX_N+1]; int sz3[MAX_N+1]; vector<pii> sz4[MAX_N+1]; void color(int x, int y){ if(y>0){ BCC[y].pb(x); cl[x].pb(y); } vst[x] = true; bool tf = false; int sum = 0; for(int i : gp[x]){ if(vst[i]) continue; if(dfsn[x]<=up[i]){ tf = true; BCC[++cnt].pb(x); if(N-sz2[i]-1!=0) { sz[cnt].pb({x, N - sz2[i] - 1}); sz4[x].pb({cnt, sz2[i]}); } sum += sz2[i]; cl[x].pb(cnt); color(i, cnt); }else{ color(i, y); } } if(tf && y>0){ sz[y].pb({x, sum}); sz4[x].pb({y, N - 1 - sum}); } } ll ans; int main(){ scanf("%d%d", &NN, &M); for(int i=1; i<=M; i++){ int a, b; scanf("%d%d", &a, &b); gp[a].pb(b); gp[b].pb(a); } for(int i=1; i<=NN; i++){ if(vstt[i]) continue; while(!v.empty()) v.pop_back(); dfs(i); N = v.size(); cnt = pcnt-1; color(i, 0); for(int i:v){ for(int j : cl[i]){ sz3[i] += (BCC[j].size() - 1); } TEST cout<<i<<" "<<sz3[i]<<endl; ans += (ll)sz3[i] * (ll)(sz3[i]-1); } for(int i=pcnt; i<=cnt; i++){ // type 2 ll sum1 = 0, sum2 = 0; ll num = 0; TEST cout<<i<<endl; for(int j : BCC[i]){ TEST cout<<j<<" "; if(cl[j].size()==1) num++; } TEST cout<<endl; TEST cout<<num<<endl; ans += num * (num-1) * (ll)(N - BCC[i].size()) * 2LL; for(pii j : sz[i]){ sum2 += sum1 * (ll)j.second; sum1 += (ll)j.second; ans += 2ll * (ll)(BCC[i].size() - num - 1) * (ll)(N - j.second - sz3[j.first] - 1); ans += 2LL * (ll)num * (ll)(N - BCC[i].size() - j.second); // TEST cout<<j.first<<" "<<j.second<<endl; // TEST cout<<"*"<<(N-BCC[i].size() -j.second)<<endl; ans += 2LL * (ll)num * (ll)(N - sz3[j.first] - 1); // TEST cout<<"&"<<(j.second - sz3[j.first] + BCC[i].size() - 1)<<endl; } TEST cout<<num<<" "<<sum2<<endl; ans += num * 2LL * sum2; } TEST cout<<ans<<endl; for(int i : v){ if(cl[i].size()>1){ ll sum1 = 0, sum2 = 0; TEST cout<<i<<endl; for(pii j : sz4[i]){ TEST cout<<j.first<<" "<<j.second<<endl; sum2 += (ll)(j.second - BCC[j.first].size() + 1) * sum1; sum1 += (ll)(j.second - BCC[j.first].size() + 1); } ans += 2LL * sum2; } } pcnt = cnt+1; cnt = 0; } cout<<ans<<endl; return 0; }

Compilation message (stderr)

count_triplets.cpp: In function 'int main()':
count_triplets.cpp:93:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &NN, &M);
  ~~~~~^~~~~~~~~~~~~~~~~
count_triplets.cpp:95:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int a, b; scanf("%d%d", &a, &b);
             ~~~~~^~~~~~~~~~~~~~~~
#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...