Submission #1202107

#TimeUsernameProblemLanguageResultExecution timeMemory
1202107aykhnRoad Closures (APIO21_roads)C++20
0 / 100
2095 ms12372 KiB
#include "roads.h" #include <bits/stdc++.h> using namespace std; const int MXN = 1e5 + 5; int n, k; int deg[MXN]; int used[MXN]; vector<array<long long, 3>> adj[MXN]; array<int, 2> dfs(int a, int p, int cur, long long sum) { if (sum > 0 && (cur == 0 || deg[a] < k)) return {a, sum}; for (auto &[v, w, idx] : adj[a]) { if (v == p) continue; if (used[idx] == cur) { if (!cur) { array<int, 2> x = dfs(v, a, cur ^ 1, sum + w); if (x[0] != -1) { deg[a]++, deg[v]++; used[idx] ^= 1; return x; } } else { array<int, 2> x = dfs(v, a, cur ^ 1, sum - w); if (x[0] != -1) { deg[a]--, deg[v]--; used[idx] ^= 1; return x; } } } } return {-1, 0}; } vector<long long> minimum_closure_costs(int N, vector<int> U, vector<int> V, vector<int> W) { n = N; long long all = 0; for (int i = 0; i < U.size(); i++) { long long u = U[i], v = V[i], w = W[i]; adj[u].push_back({v, w, i}); adj[v].push_back({u, w, i}); all += w; } long long res = 0; vector<long long> v; for (k = 0; k < n; k++) { int F = 1; while (F) { F = 0; long long S = 0; for (int i = 0; i < n; i++) { if (deg[i] == k) continue; S += dfs(i, i, 0, 0)[1]; } res += S; F = (S > 0); } v.push_back(all - res); } return v; }

Compilation message (stderr)

roads.cpp: In function 'std::array<int, 2> dfs(int, int, int, long long int)':
roads.cpp:15:55: warning: narrowing conversion of 'sum' from 'long long int' to 'int' [-Wnarrowing]
   15 |   if (sum > 0 && (cur == 0 || deg[a] < k)) return {a, sum};
      |                                                       ^~~
#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...