Submission #563715

#TimeUsernameProblemLanguageResultExecution timeMemory
5637158e7Swapping Cities (APIO20_swap)C++17
37 / 100
2071 ms12880 KiB
//Challenge: Accepted #include "swap.h" #include <bits/stdc++.h> using namespace std; #ifdef zisk void debug(){cout << endl;} template<class T, class ... U> void debug(T a, U ... b){cout << a << " ", debug(b...);} template<class T> void pary(T l, T r) { while (l != r) cout << *l << " ", l++; cout << endl; } #else #define debug(...) 0 #define pary(...) 0 #endif #define ll long long #define maxn 100005 #define pii pair<int, int> #define ff first #define ss second #define io ios_base::sync_with_stdio(0);cin.tie(0); struct edge{ int u, v, w; edge(){u = v = w = 0;} edge(int a, int b, int c){u = a, v = b, w = c;} }; struct DSU{ int par[maxn], deg[maxn]; bool mark[maxn]; pii leaf[maxn]; void init(int n) { for (int i = 0;i < n;i++) par[i] = i, deg[i] = 0, mark[i] = 0, leaf[i] = {i, 0}; } int find(int a) { return a == par[a] ? a : (par[a] = find(par[a])); } void Union(int a, int b) { int pa = find(a), pb = find(b); deg[a]++, deg[b]++; if (deg[a] >= 3 || deg[b] >= 3 || mark[pa]) mark[pb] = 1; if (deg[a] == 1 && deg[b] == 1) { leaf[pb] = {a, b}; } else { if (pa == pb && (leaf[pa] == make_pair(a, b) || leaf[pa] == make_pair(b, a))) mark[pb] = 1; if (pa != pb) { pii p; if (deg[leaf[pa].ff] == 1) p.ff = leaf[pa].ff; else p.ff = leaf[pa].ss; if (deg[leaf[pb].ff] == 1) p.ss = leaf[pb].ff; else p.ss = leaf[pb].ss; leaf[pb] = p; } } par[pa] = pb; } } d; vector<edge> ed; int n, m; void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) { n = N, m = M; for (int i = 0;i < m;i++) ed.push_back(edge(U[i], V[i], W[i])); sort(ed.begin(), ed.end(), [&] (edge x, edge y){return x.w < y.w;}); } int getMinimumFuelCapacity(int X, int Y) { d.init(n); int ret = -1; for (int i = 0;i < m;i++) { d.Union(ed[i].u, ed[i].v); int v = d.find(X); debug(v, d.leaf[v].ff, d.leaf[v].ss); if (d.find(X) == d.find(Y) && d.mark[d.find(X)]) { ret = ed[i].w; break; } } debug(); return ret; }

Compilation message (stderr)

swap.cpp: In function 'int getMinimumFuelCapacity(int, int)':
swap.cpp:13:20: warning: statement has no effect [-Wunused-value]
   13 | #define debug(...) 0
      |                    ^
swap.cpp:71:3: note: in expansion of macro 'debug'
   71 |   debug(v, d.leaf[v].ff, d.leaf[v].ss);
      |   ^~~~~
swap.cpp:70:7: warning: unused variable 'v' [-Wunused-variable]
   70 |   int v = d.find(X);
      |       ^
swap.cpp:13:20: warning: statement has no effect [-Wunused-value]
   13 | #define debug(...) 0
      |                    ^
swap.cpp:77:2: note: in expansion of macro 'debug'
   77 |  debug();
      |  ^~~~~
#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...