Submission #1060946

#TimeUsernameProblemLanguageResultExecution timeMemory
1060946trMatherzDuathlon (APIO18_duathlon)C++17
0 / 100
79 ms28084 KiB
#include <iostream> // #include <fstream> // std::ifstream cin ("pop.in"); // std::ofstream cout ("pop.out"); // includes #include <cmath> #include <set> #include <map> #include <queue> #include <string> #include <vector> #include <array> #include <algorithm> #include <numeric> #include <iomanip> #include <unordered_set> #include <stack> #include <ext/pb_ds/assoc_container.hpp> #include <random> #include <chrono> #include <bitset> #include <complex> // usings using namespace std; using namespace __gnu_pbds; // misc #define ll long long #define ld long double #define pb push_back #define pq priority_queue #define ub upper_bound #define lb lower_bound template <typename T, typename U> bool emin(T &a, const U &b) { return b < a ? a = b, true : false; } template <typename T, typename U> bool emax(T &a, const U &b) { return b > a ? a = b, true : false; } typedef uint64_t hash_t; // vectors #define vi vector<int> #define vvi vector<vi> #define vvvi vector<vvi> #define vpii vector<pair<int, int>> #define vvpii vector<vector<pair<int, int>>> #define vppipi vector<pair<int, pair<int, int>>> #define vl vector<ll> #define vvl vector<vl> #define vvvl vector<vvl> #define vpll vector<pair<ll, ll>> #define vvpll vector<vpll> #define vb vector<bool> #define vvb vector<vb> #define vs vector<string> #define sz(x) (int)x.size() #define rz resize #define all(x) x.begin(), x.end() #define vc vector<char> #define vvc vector<vc> // pairs #define pii pair<int, int> #define pll pair<ll, ll> #define mp make_pair #define f first #define s second // sets #define si set<int> #define sl set<ll> #define ss set<string> #define in insert template <class T> using iset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; // maps #define mii map<int, int> #define mll map<ll, ll> // loops #define FR(x, z, y) for (int x = z; x < y; x++) #define FRE(x, z, y) FR(x, z, y + 1) #define F(x, y) FR(x, 0, y) #define FE(x, y) F(x, y + 1) #define A(x, y) for (auto &x : y) struct BCC { int n; vvi a; vb b; vi v; vvi tre; int bad = -1; void init(int tn) { n = tn, a = vvi(n), b = vb(n, false), v = vi(n); } void ad(int x, int y) { a[x].pb(y); a[y].pb(x); } void go() { vvi c; vi stck, num(n, -1), low(n); function<void(int, int, int &)> dfs = [&](int x, int p, int &t) { num[x] = low[x] = t++; stck.pb(x); A(u, a[x]) { if(u == p) continue; if(num[u] != -1) emin(low[x], num[u]); else { dfs(u, x, t); emin(low[x], low[u]); if(low[u] >= num[x]) { b[x] = (num[x] > 0 || num[u] > 1); c.pb({x}); for(; c.back().back() != u; stck.pop_back()) c.back().pb(stck.back()); } } } }; int t = 0; dfs(0, -1, t); tre = vvi(1); int cur = 0; F(i, n) if(b[i]) v[i] = cur++, tre.pb({}), bad++; A(u, c) { int x = cur++; tre.pb({}); A(p, u) { if(!b[p]) v[p] = x; else tre[x].pb(v[p]), tre[v[p]].pb(x); } } } }; ll an = 0; BCC a; vl b; int n, m; vb c; ll amt = 0; void plop(int x, int p){ amt += b[x]; c[x] = true; A(u, a.tre[x]) if(u != p) plop(u, x); } ll dfs(int x, int p){ ll low = b[x]; A(u, a.tre[x]) { if(u == p) continue; ll cur = dfs(u, x); low += cur; if(a.bad < x) an -= b[x] * cur * (cur - 1); } if(a.bad < x) an -= b[x] * (amt - low) * (amt - low - 1); return low; } int main() { cin >> n >> m; a.init(n); b = vl(n * 3, 0); c= vb(n * 3, false); F(i, m){ int x, y; cin >> x >> y; x--; y--; a.ad(x, y); } a.go(); F(i, n) b[a.v[i]]++; F(i, n){ amt = 0; if(!c[a.v[i]]) { plop(a.v[i], -1); an += amt * (amt - 1) * (amt - 2); dfs(a.v[i], -1); } } cout << an; }
#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...