diff --git a/algorithms/graph/kruskal.cpp b/algorithms/graph/kruskal.cpp index 383808ea7d1dd5e3cb483c5fba07c0ac0bec8a2e..d6b05e0e8c4604dbaa8373bb8b5a6eb0d578b3a0 100644 --- a/algorithms/graph/kruskal.cpp +++ b/algorithms/graph/kruskal.cpp @@ -12,15 +12,12 @@ vector<iii> mst; // Result vector<iii> edges; -bool cmp(iii a, iii b) { - return a.se < b.se; - //* return a.se > b.se -} - - // Return value of MST and build mst vector with edges that belong to the tree int kruskal() { - sort(all(edges), cmp); + sort(all(edges), [&](const iii &a, const iii &b) { + return a.se < b.se; + //* return a.se > b.se + }); int size = 0; for (int i = 0; i < MAX; i++) diff --git a/algorithms/graph/lca.cpp b/algorithms/graph/lca.cpp index 32a2fcee0e90520ea7d25c3cbb50912e0164ce43..6bfb144c8cbedf4cbd0dee609db2b436878ef997 100644 --- a/algorithms/graph/lca.cpp +++ b/algorithms/graph/lca.cpp @@ -42,8 +42,8 @@ void dfs(int v, int p = -1, int c = 0) { // Preprocess tree rooted at v void preprocess(int v) { - memset(par, -1, sizeof par); - //*** memset(cost, 0, sizeof cost); + mset(par, -1); + //*** mset(cost, 0; dfs(v); } diff --git a/contests/ICPC_SA17/C.cpp b/contests/ICPC_SA17/C.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8503489d76e01a89b3011a4e4e363037e93d05b7 --- /dev/null +++ b/contests/ICPC_SA17/C.cpp @@ -0,0 +1,60 @@ +#include <bits/stdc++.h> + +#define EPS 1e-6 +#define MOD 1000000007 +#define inf 0x3f3f3f3f +#define llinf 0x3f3f3f3f3f3f3f3f + +#define fi first +#define se second +#define pb push_back +#define ende '\n' + +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +#define mset(x, y) memset(&x, (y), sizeof(x)) + +using namespace std; + +typedef long long ll; +typedef pair<int,int> ii; + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + int n, k; cin >> k >> n; + vector<int> cnt(k + 1); + for (int i = 0; i < n; ++i) { + int x; cin >> x; cnt[x]++; + } + + set<int> S; + vector<int> v; + + for (int i = 1; i <= k; ++i) S.insert(cnt[i]); + for (auto i : S) v.pb(i); + + auto find_cnt = [&](int x) { + for (int i = 1; i <= k; ++i) + if (cnt[i] == x) + return i; + + assert(false); + }; + + + int flo = n / k; + int cei = (n - 1) / k + 1; + + if (n % k == 0 && (v.size() == 3 && v[0] == v[1] - 1 && v[1] == v[2] - 1)) + cout << "-" << find_cnt(v[2]) << " " << "+" << find_cnt(v[0]) << ende; + else if (flo * k + 1 == n && (v.size() == 2 && v[0] == v[1] - 1)) + cout << "-" << find_cnt(v[1]) << ende; + else if (cei * k - 1 == n && (v.size() == 2 && v[0] == v[1] - 1)) + cout << "+" << find_cnt(v[0]) << ende; + else + cout << "*" << ende; + + return 0; +} diff --git a/contests/ICPC_SA17/E.cpp b/contests/ICPC_SA17/E.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7f1565986514fd51d9ac2f53250ffd5bad57d535 --- /dev/null +++ b/contests/ICPC_SA17/E.cpp @@ -0,0 +1,58 @@ +#include <bits/stdc++.h> + +#define MAX 1010 +#define EPS 1e-6 +#define MOD 1000000007 +#define inf 0x3f3f3f3f +#define llinf 0x3f3f3f3f3f3f3f3f + +#define fi first +#define se second +#define pb push_back +#define ende '\n' + +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +#define mset(x, y) memset(&x, (y), sizeof(x)) + +using namespace std; + +typedef long long ll; +typedef pair<int,int> ii; + +int n; +string s; +int dp[MAX][MAX]; + +bool solve(int i, int r) { + if (i == s.size()) + return (r % n == 0); + + if (dp[i][r] != -1) + return dp[i][r]; + + if (s[i] == '?') { + for (int j = (i == 0); j <= 9; ++j) + if (solve(i + 1, (r * 10 + j) % n)) { + s[i] = j + '0'; + return dp[i][r] = true; + } + } else { + if (solve(i + 1, (r * 10 + (s[i] - '0')) % n)) + return dp[i][r] = true; + } + + return dp[i][r] = false; +} + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + cin >> s >> n; + mset(dp, -1); + + cout << (!solve(0, 0) ? "*" : s) << ende; + return 0; +} + diff --git a/contests/ICPC_SA17/H.cpp b/contests/ICPC_SA17/H.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f4449e79a226cd9599ce9bf1105d2059cb913929 --- /dev/null +++ b/contests/ICPC_SA17/H.cpp @@ -0,0 +1,31 @@ +#include <bits/stdc++.h> + +#define EPS 1e-6 +#define MOD 1000000007 +#define inf 0x3f3f3f3f +#define llinf 0x3f3f3f3f3f3f3f3f + +#define fi first +#define se second +#define pb push_back +#define ende '\n' + +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +#define mset(x, y) memset(&x, (y), sizeof(x)) + +using namespace std; + +typedef long long ll; +typedef pair<int,int> ii; + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + int a, b, c; cin >> a >> b >> c; + int d, e, f; cin >> d >> e >> f; + + cout << max(0, d - a) + max(0, e - b) + max(0, f - c) << ende; + return 0; +} diff --git a/contests/ICPC_SA17/I.cpp b/contests/ICPC_SA17/I.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4335b4aabb9843f9b81d9129fc8dd12c817b8a76 --- /dev/null +++ b/contests/ICPC_SA17/I.cpp @@ -0,0 +1,174 @@ +#include <bits/stdc++.h> + +#define MAX 201010 +#define EPS 1e-6 +#define MOD 1000000007 +#define inf 0x3f3f3f3f +#define llinf 0x3f3f3f3f3f3f3f3f + +#define fi first +#define se second +#define pb push_back +#define ende '\n' + +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +#define mset(x, y) memset(&x, (y), sizeof(x)) + +using namespace std; + +typedef long long ll; +typedef pair<int,int> ii; +typedef pair<ii,int> iii; + +map<ii, bool> mst; +vector<ii> graph[MAX]; +vector<iii> edges; + +int pare[MAX]; +int size[MAX]; + +void make_set(int x) { + pare[x] = x; + size[x] = 1; +} + + +int find_set(int x) { + if (pare[x] != x) + pare[x] = find_set(pare[x]); + return pare[x]; +} + + +void union_set(int x, int y) { + x = find_set(x); + y = find_set(y); + + if (x == y) + return; + + if (size[x] > size[y]) + swap(x, y); + + pare[x] = y; + size[y] += size[x]; +} + + +int kruskal() { + sort(all(edges), [&](const iii &a, const iii &b) { + return a.se < b.se; + }); + + int ans = 0; + for (int i = 0; i < MAX; i++) + make_set(i); + + for (int i = 0; i < edges.size(); i++) { + int pu = find_set(edges[i].fi.fi); + int pv = find_set(edges[i].fi.se); + + if (pu != pv) { + mst[edges[i].fi] = true; + + graph[edges[i].fi.fi].pb(ii(edges[i].fi.se, edges[i].se)); + graph[edges[i].fi.se].pb(ii(edges[i].fi.fi, edges[i].se)); + + ans += edges[i].se; + union_set(pu, pv); + } + } + + return ans; +} + +#define MAXLOG 20 + +int h[MAX]; +int par[MAX][MAXLOG]; +int cost[MAX][MAXLOG]; + +void dfs(int v, int p = -1, int c = 0) { + par[v][0] = p; + cost[v][0] = c; + + if (p != -1) + h[v] = h[p] + 1; + + for (int i = 1; i < MAXLOG; ++i) + if (par[v][i - 1] != -1) { + par[v][i] = par[par[v][i - 1]][i - 1]; + cost[v][i] = max(cost[v][i], max(cost[par[v][i-1]][i-1], cost[v][i-1])); + } + + for (auto u : graph[v]) + if (p != u.fi) + dfs(u.fi, v, u.se); +} + + +void preprocess(int v) { + memset(par, -1, sizeof par); + memset(cost, 0, sizeof cost); + dfs(v); +} + + +int query(int p, int q) { + int ans = 0; + + if (h[p] < h[q]) + swap(p, q); + + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] != -1 && h[par[p][i]] >= h[q]) { + ans = max(ans, cost[p][i]); + p = par[p][i]; + } + + if (p == q) + return ans; + + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] != -1 && par[p][i] != par[q][i]) { + ans = max(ans, max(cost[p][i], cost[q][i])); + p = par[p][i]; + q = par[q][i]; + } + + if (p == q) return ans; + else return max(ans, max(cost[p][0], cost[q][0])); +} + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + int n, r; cin >> n >> r; + map<ii,int> M; + for (int i = 0; i < r; ++i) { + int a, b, c; cin >> a >> b >> c; + a--, b--; + M[ii(a, b)] = c; + M[ii(b, a)] = c; + edges.pb(iii(ii(a, b), c)); + edges.pb(iii(ii(b, a), c)); + } + + int vmst = kruskal(); + preprocess(0); + + int q; cin >> q; + for (int i = 0; i < q; ++i) { + int a, b; cin >> a >> b; + a--, b--; + + if (mst[ii(a, b)] || mst[ii(b, a)]) + cout << vmst << ende; + else + cout << vmst - query(a, b) + M[ii(a, b)] << ende; + } + + return 0; +} diff --git a/contests/ICPC_SA17/a.out b/contests/ICPC_SA17/a.out new file mode 100755 index 0000000000000000000000000000000000000000..bfe686fe7a6b3981e10c013b2d82a356a7be7cf7 Binary files /dev/null and b/contests/ICPC_SA17/a.out differ