Submission #261167

#TimeUsernameProblemLanguageResultExecution timeMemory
261167HideoDuathlon (APIO18_duathlon)C++17
23 / 100
211 ms17252 KiB
//1610612741, 1000000007 //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); //#pragma GCC optimization ("O3") //#pragma GCC optimization ("unroll-loops") //#pragma GCC optimize ("Ofast") //#pragma GCC target ("avx,avx2,fma") #include <bits/stdc++.h> using namespace std; #define all(s) s.begin(), s.end() #define ok puts("ok") #define ll long long #define pb push_back #define mk make_pair #define fr first #define sc second #define vi vector < int > #define pi pair < int, int > #define pii pair < int, pi > #define next next123 #define left left123 const int N = 2e5 + 7; const int INF = 1e9 + 7; ll S1, S2, S3, S4; int h[N], d[N], sz[N], mn[N], flg[N]; int n, m, csz; vi g[N]; void precalc (int v, int p = 0){ h[v] = h[p] + 1; sz[v] = 1; for (int to : g[v]){ if (!h[to]){ precalc(to, v); sz[v] += sz[to]; } } } void calc1 (int v){ for (int to : g[v]){ if (h[to] - h[v] == 1){ calc1(to); S1 += 1LL * (csz - sz[to] - 1) * sz[to]; } } S1 += 1LL * (csz - sz[v]) * (sz[v] - 1); } int calc2 (int v){ mn[v] = h[v]; int c = 0; for (int to : g[v]){ if (h[to] - h[v] == 1){ c += calc2(to); mn[v] = min(mn[v], mn[to]); } else mn[v] = min(mn[v], h[to]); } S2 += 1LL * c * (csz - sz[v]); c -= d[h[v]]; if (mn[v] + 1 < h[v]){ d[mn[v] + 1]++; c++; } return c; } bool comp (int a, int b){ return mn[a] > mn[b]; } void calc3 (int v){ for (int to : g[v]){ if (h[to] - h[v] == 1){ flg[v] = 1; S3 += 1LL * sz[to] * ((h[v] - mn[v] - 1) * (h[v] - mn[v]) - (h[v] - mn[to] - 1) * (h[v] - mn[to])) / 2; calc3(to); } } if (!flg[v]) S3 += 1LL * (h[v] - mn[v] - 1) * (h[v] - mn[v]) / 2; sort(all(g[v]), comp); } void calc4 (int v){ int s = 0; for (int to : g[v]){ if (h[to] - h[v] == 1){ if (mn[to] < h[v]) S4 += 1LL * (h[v] - mn[to]) * s; s += sz[to]; calc4(to); } } } main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; for (int i = 1; i <= m; i++){ int a, b; cin >> a >> b; g[a].pb(b); g[b].pb(a); } for (int i = 1; i <= n; i++) if (!h[i]) precalc(i); for (int i = 1; i <= n; i++){ if (h[i] == 1){ csz = sz[i]; calc1(i); calc2(i); calc3(i); calc4(i); } } cout << S1 + 2LL * (S2 + S3 + S4); }

Compilation message (stderr)

count_triplets.cpp:104:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main(){
      ^
#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...