"рд▓рд╛рдЗрд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ": ITMO рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ ICPC рдХреНрд╖реЗрддреНрд░реАрдп рд╕реЗрдореАрдлрд╛рдЗрдирд▓ рдХреИрд╕реЗ рд╣реБрдЖ

рджрд┐рд╕рдВрдмрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, ICPC рдЫрд╛рддреНрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд░реНрд▓реНрдб рдЪреИрдореНрдкрд┐рдпрдирд╢рд┐рдк рдХрд╛ рд╕реЗрдореАрдлрд╛рдЗрдирд▓ред рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ "рдЯреНрд░рд╛рдпрд▓" рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдФрд░ рдХреМрди рд╡рд╕рдВрдд рдореЗрдВ рдЙрддреНрддрд░ рдпреВрд░реЗрд╢рд┐рдпрд╛ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛, рдЦреЗрд▓ рдХреЗ рдореБрдЦреНрдп рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреЗ рд╡рд┐рд╢реНрд╡рд╕реНрддрд░реАрдп рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдореЗрдВред


icpcnews / рдлрд╝реНрд▓рд┐рдХрд░ / рд╕реАрд╕реА рдмрд╛рдп / рдлрд╝рд╛рдЗрдирд▓ ICPC-2017

рдкрдВрджреНрд░рд╣ рд╡рд┐рдЬреЗрддрд╛


рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ, рдЬрд┐рд╕рдореЗрдВ 300 рд╕реЗ рдЕрдзрд┐рдХ рдЯреАрдореЛрдВ рдиреЗ рднрд╛рдЧ рд▓рд┐рдпрд╛, рдПрдХ рд╕рд╛рде рдЪрд╛рд░ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реБрдИ: рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ, рдмрд░рдиреМрд▓, рддреНрдмрд┐рд▓рд┐рд╕реА рдФрд░ рдЕрд▓реНрдорд╛-рдЕрддрд╛ рдореЗрдВред рдЖрдИрдЯреАрдПрдордУ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЛ рд░реВрд╕ рдФрд░ рдмрд╛рд▓реНрдЯрд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ рд╕реЗ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рдЯреАрдореЗрдВ рдорд┐рд▓реА рд╣реИрдВред рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ NEERC рдЙрддреНрддрд░реА рдпреВрд░реЗрд╢рд┐рдпрд╛ рдХрдк рдФрд░ ICPC рдХреЗ рдлрд╛рдЗрдирд▓ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝рд╛рдИ рд▓рдбрд╝реАред

ICPC рдХреНрдпрд╛ рд╣реИ?
рдпрд╣ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рдЕрдзреНрдпрдпрди рдХреЗ рдкрд╣рд▓реЗ рд╡рд░реНрд╖ рдХреЗ рд╕реНрдирд╛рддрдХ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреАрдо рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╣реИред рдЪреИрдореНрдкрд┐рдпрдирд╢рд┐рдк рдЪрд╛рд▓реАрд╕ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдореЗрдВ рддреАрди рд▓реЛрдЧ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдорд╢реАрди рдкрд░, рдЙрдиреНрд╣реЗрдВ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд▓рдЧрднрдЧ рдПрдХ рджрд░реНрдЬрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рдЬреНрдЮрд╛рди, рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ рдЯреАрдорд╡рд░реНрдХ рдХреМрд╢рд▓ рдХрд╛ рднреА рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдУрд▓рдВрдкрд┐рдпрд╛рдб рдХреЗ рд╡рд┐рдЬреЗрддрд╛ рдмрдбрд╝реА рдЖрдИрдЯреА рдХрдВрдкрдирд┐рдпреЛрдВ рд╕реЗ рдирдХрдж рдкреБрд░рд╕реНрдХрд╛рд░ рдФрд░ рдиреМрдХрд░реА рдХреЗ рдирд┐рдордВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдореЙрд╕реНрдХреЛ рд╕реНрдЯреЗрдЯ рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА рдХреА рдЯреАрдо рдЧреНрдпрд╛рд░рд╣ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдЪреИрдВрдкрд┐рдпрди рдмрди рдЧрдИ ред рдХреЛрдИ рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖред рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ MIPT рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧреА рдереЗред "рд▓рдбрд╝рд╛рдЗрдпреЛрдВ" рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рд▓рд╛рдЗрд╡ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред ICPC YouTube рдЪреИрдирд▓ рдкрд░ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИ:


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдкрдВрджреНрд░рд╣ рдЯреАрдореЛрдВ рдХреЛ ICPC-2019 рдХреЗ рдлрд╛рдЗрдирд▓ рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ (рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ), рдЬрд┐рд╕рдореЗрдВ ITMO рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рд▓реЛрдЧ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдорд╛рд░реНрдЪ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╡реЗ рд╡рд┐рд╢реНрд╡ рдЪреИрдВрдкрд┐рдпрди рдХреЗ рдЦрд┐рддрд╛рдм рдХреЗ рд▓рд┐рдП рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯреЛ (рдкреБрд░реНрддрдЧрд╛рд▓) рд╢рд╣рд░ рдЬрд╛рдПрдВрдЧреЗред

рд╕реЗрдореАрдлрд╛рдЗрдирд▓ рдореЗрдВ рдХреИрд╕реЗ рдЧрдП?


рдЫрд╛рддреНрд░реЛрдВ рдиреЗ рдЬрд╛рд╡рд╛, рд╕реА ++, рдкрд╛рдпрдерди рдпрд╛ рдХреЛрдЯрд▓рд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА, рдПрдХрд╛рдЧреНрд░рддрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ITMO рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреА рдЯреАрдо Gennady Korotkevich рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ ICPC рдХреЗ рджреЛ рдмрд╛рд░ рд╡рд┐рдЬреЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдПрдХ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдЧреНрд░рд╛рдл рд╣реИред рджреЛ рдХреЛрдиреЗ u рдФрд░ v рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЛ рд╕рдмрд╕реЗ рдХрдо рдкрде рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЬреЛрдбрд╝рд┐рдпреЛрдВ рдХреЗ рдпреЛрдЧ d (u, v) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рджреЛ рдирдВрдмрд░ n рдФрд░ m (2 two n ; 10 5 ; n-1 numbers m + n + 42) - рдХреНрд░рдорд╢рдГ рдХреЛрдиреЗ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдирдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдиреЗ 1 рд╕реЗ n рддрдХ рдЧрд┐рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рдореА рд▓рд╛рдЗрдиреЗрдВ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИрдВ: x i рдФрд░ y i (1, x i , y i тЙа n; x i x y i ) - рдпреЗ ith edge рдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдЬреЛрдбрд╝реА рдХреЗ рдмреАрдЪ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХрд┐рдирд╛рд░реЗ рд╣реЛрддрд╛ рд╣реИред

рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо (рдПрдХ рдЬреВрд░реА рд╕рджрд╕реНрдп рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд):

C ++ рдХреЛрдб
#undef _GLIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<set<int>> gs(n); for (int i = 0; i < m; i++) { int x, y; cin >> x >> y; x--; y--; gs[x].insert(y); gs[y].insert(x); } long long ans = 0; vector<int> weight(n, 1); set<pair<int,int>> s; for (int i = 0; i < n; i++) { s.emplace(gs[i].size(), i); } while (s.size() > 1) { int i = s.begin()->second; assert(!gs[i].empty()); if (gs[i].size() > 1) { break; } s.erase(s.begin()); int j = *gs[i].begin(); gs[i].clear(); ans += (long long) 2 * weight[i] * (n - weight[i]); weight[j] += weight[i]; auto it = gs[j].find(i); assert(it != gs[j].end()); s.erase({gs[j].size(), j}); gs[j].erase(it); s.emplace(gs[j].size(), j); } if (s.size() == 1) { cout << ans / 2 << '\n'; return 0; } vector<vector<int>> g(n); for (int i = 0; i < n; i++) { g[i] = vector<int>(gs[i].begin(), gs[i].end()); } vector<int> id(n, -1); int cnt = 0; for (int i = 0; i < n; i++) { if ((int) g[i].size() > 2) { id[i] = cnt++; } } if (cnt == 0) { for (int i = 0; i < n; i++) { if ((int) g[i].size() == 2) { id[i] = cnt++; break; } } assert(cnt > 0); } vector<int> rev_id(n, -1); for (int i = 0; i < n; i++) { if (id[i] != -1) { rev_id[id[i]] = i; } } vector<vector<vector<vector<int>>>> edges(cnt, vector<vector<vector<int>>>(cnt)); for (int i = 0; i < n; i++) { if (id[i] >= 0) { for (int j : g[i]) { if (id[j] >= 0) { edges[id[i]][id[j]].emplace_back(); } } } } for (int i = 0; i < n; i++) { if ((int) g[i].size() == 2 && id[i] == -1) { vector<int> edge; edge.push_back(weight[i]); id[i] = -2; vector<int> fin(2); for (int dir = 0; dir < 2; dir++) { int x = g[i][dir]; int px = i; while (id[x] == -1) { assert((int) g[x].size() == 2); edge.push_back(weight[x]); id[x] = -2; int nx = px ^ g[x][0] ^ g[x][1]; px = x; x = nx; } fin[dir] = x; reverse(edge.begin(), edge.end()); } edges[id[fin[1]]][id[fin[0]]].push_back(edge); } } vector<vector<int>> dist(cnt, vector<int>(cnt, n + 1)); for (int i = 0; i < cnt; i++) { dist[i][i] = 0; } for (int i = 0; i < cnt; i++) { for (int j = 0; j < cnt; j++) { for (auto &p : edges[i][j]) { dist[i][j] = dist[j][i] = min(dist[i][j], (int) p.size() + 1); } } } for (int k = 0; k < cnt; k++) { for (int i = 0; i < cnt; i++) { for (int j = 0; j < cnt; j++) { dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]); } } } vector<vector<vector<vector<long long>>>> edge_pref_sum(cnt, vector<vector<vector<long long>>>(cnt)); vector<vector<vector<vector<long long>>>> edge_pref_sum_by_pos(cnt, vector<vector<vector<long long>>>(cnt)); for (int i = 0; i < cnt; i++) { for (int j = 0; j < cnt; j++) { edge_pref_sum[i][j].resize(edges[i][j].size()); edge_pref_sum_by_pos[i][j].resize(edges[i][j].size()); for (int k = 0; k < (int) edges[i][j].size(); k++) { edge_pref_sum[i][j][k].resize(edges[i][j][k].size() + 1); edge_pref_sum_by_pos[i][j][k].resize(edges[i][j][k].size() + 1); for (int t = 0; t < (int) edges[i][j][k].size(); t++) { edge_pref_sum[i][j][k][t + 1] = edge_pref_sum[i][j][k][t] + edges[i][j][k][t]; edge_pref_sum_by_pos[i][j][k][t + 1] = edge_pref_sum_by_pos[i][j][k][t] + (long long) edges[i][j][k][t] * t; } } } } auto get = [&](int i, int j, int k, int from, int to, int coeff_from, int coeff_to) -> long long { if (from > to) { return 0; } assert(0 <= from && to <= (int) edges[i][j][k].size() - 1); long long ret = (edge_pref_sum[i][j][k][to + 1] - edge_pref_sum[i][j][k][from]) * coeff_from; if (coeff_from != coeff_to) { assert(abs(coeff_from - coeff_to) == to - from); long long other = edge_pref_sum_by_pos[i][j][k][to + 1] - edge_pref_sum_by_pos[i][j][k][from]; other -= (edge_pref_sum[i][j][k][to + 1] - edge_pref_sum[i][j][k][from]) * from; ret += other * (coeff_from < coeff_to ? 1 : -1); } return ret; }; for (int v = 0; v < cnt; v++) { long long w = weight[rev_id[v]]; for (int j = 0; j < cnt; j++) { ans += dist[v][j] * w * weight[rev_id[j]]; } for (int i = 0; i < cnt; i++) { for (int j = 0; j < cnt; j++) { for (int k = 0; k < (int) edges[i][j].size(); k++) { int x = dist[v][i]; int y = dist[v][j]; int cc = (y - x + (int) edges[i][j][k].size() + 1) / 2; cc = min(max(cc, 0), (int) edges[i][j][k].size()); ans += w * get(i, j, k, 0, cc - 1, x + 1, x + cc); ans += w * get(i, j, k, cc, (int) edges[i][j][k].size() - 1, y + ((int) edges[i][j][k].size() - cc), y + 1); } } } } vector<pair<int,int>> pairs; for (int i = 0; i < cnt; i++) { for (int j = 0; j < cnt; j++) { if (!edges[i][j].empty()) { pairs.emplace_back(i, j); } } } for (int ii = 0; ii < cnt; ii++) { for (int jj = 0; jj < cnt; jj++) { for (int kk = 0; kk < (int) edges[ii][jj].size(); kk++) { for (int tt = 0; tt < (int) edges[ii][jj][kk].size(); tt++) { long long w = edges[ii][jj][kk][tt]; for (int i = 0; i < cnt; i++) { int d1 = dist[ii][i] + tt + 1; int d2 = dist[jj][i] + (int) edges[ii][jj][kk].size() - tt; ans += w * weight[rev_id[i]] * min(d1, d2); } for (auto &p : pairs) { int i = p.first; int j = p.second; for (int k = 0; k < (int) edges[i][j].size(); k++) { if (i == ii && j == jj && k == kk) { int d1 = tt; int d2 = (int) edges[ii][jj][kk].size() - tt + dist[i][j] + 1; if (d1 <= d2) { ans += w * get(i, j, k, 0, tt, tt, 0); } else { int cut = (d1 - d2 + 1) / 2; ans += w * get(i, j, k, 0, cut - 1, d2, d2 + cut - 1); ans += w * get(i, j, k, cut, tt, tt - cut, 0); } int d3 = (int) edges[ii][jj][kk].size() - 1 - tt; int d4 = tt + 1 + dist[i][j] + 1; if (d3 <= d4) { ans += w * get(i, j, k, tt, (int) edges[i][j][k].size() - 1, 0, (int) edges[i][j][k].size() - 1 - tt); } else { int cut = (d3 - d4 + 1) / 2; ans += w * get(i, j, k, (int) edges[i][j][k].size() - cut, (int) edges[i][j][k].size() - 1, d4 + cut - 1, d4); ans += w * get(i, j, k, tt, (int) edges[i][j][k].size() - 1 - cut, 0, (int) edges[i][j][k].size() - 1 - cut - tt); } } else { int d1 = dist[ii][i] + tt + 1; int d2 = dist[jj][i] + (int) edges[ii][jj][kk].size() - tt; int d3 = dist[ii][j] + tt + 1; int d4 = dist[jj][j] + (int) edges[ii][jj][kk].size() - tt; int x = min(d1, d2); int y = min(d3, d4); int cc = (y - x + (int) edges[i][j][k].size() + 1) / 2; cc = min(max(cc, 0), (int) edges[i][j][k].size()); ans += w * get(i, j, k, 0, cc - 1, x + 1, x + cc); ans += w * get(i, j, k, cc, (int) edges[i][j][k].size() - 1, y + ((int) edges[i][j][k].size() - cc), y + 1); } } } } } } } assert(ans % 2 == 0); cout << ans / 2 << '\n'; return 0; } 


рдФрд░ рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ рдХрд┐ рдПрдХ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдЯреАрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ:

C ++ рдХреЛрдб
 #include <bits/stdc++.h> #define ll long long #define ld long double using namespace std; int main() { int n,m; cin>>n>>m; int b[n+1][n+1]={}; int c[n+1][n+1]={}; int a1,b1; vector < vector <int> > v(n+1); vector <int> met(n+1); queue <int> q; for(int i=0;i<m;i++){ cin>>a1>>b1; v[a1].push_back(b1); v[b1].push_back(a1); c[a1][b1]=1; c[b1][a1]=1; } long long ans=0; for(int i=1;i<=n;i++){ q.push(i); met.clear(); met.resize(n+1); while(!q.empty()){ int frontt = q.front(); met[frontt]=1; for(int j=0;j<v[frontt].size();j++){ if(!met[v[frontt][j]]){ if(b[i][frontt]+1<b[i][v[frontt][j]] || b[i][v[frontt][j]]==0){ ans-=b[i][v[frontt][j]]; b[i][v[frontt][j]]=b[i][frontt]+1; ans+=b[i][v[frontt][j]]; } q.push(v[frontt][j]); met[v[frontt][j]]=1; } } q.pop(); } } cout<<ans/2; return 0; } 


рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( рдкреЗрдЬ 3 )ред

рдПрдХ рдЕрдиреНрдп рдХрд╛рд░реНрдп "рд╢рддрд░рдВрдЬ" рд╣реИ:

рдПрд▓реНрдорд╛ рд╢рддрд░рдВрдЬ рдЦреЗрд▓рдирд╛ рд╕реАрдЦрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдмрджрдорд╛рд╢ рдХреНрд╖реИрддрд┐рдЬ рдпрд╛ рд▓рдВрдмрд╡рдд рдЪрд▓рддрд╛ рд╣реИред рдПрд▓реНрдорд╛ рдХреА рджрд╛рджреА рдиреЗ рдЙрд╕реЗ рдПрдХ 8x8 рд╢рддрд░рдВрдЬ рдХреА рдмрд┐рд╕рд╛рдд рджреА рдФрд░ рдЙрд╕реЗ рд╕реЗрд▓ рдП 1 рд╕реЗ рдПрдЪ 8 рддрдХ рдХреА рдЪрд╛рд▓ рдореЗрдВ n рдЪрд╛рд▓ рдореЗрдВ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдЬрд┐рди рдкрд░ рдЖрдВрдХрдбрд╝рд╛ рд░реБрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрдирдкреБрдЯ рдХреЛ рдореВрд▓реНрдп n (2 тЙд n supplied 63) рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдЙрди рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдПрд▓реНрдорд╛ рдиреЗ рдХрд┐рд╢реНрддреА рдкрд░ рд░рдЦрд╛ рдерд╛ред

рдпрд╣рд╛рдБ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЬреВрд░реА рд╕рджрд╕реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдЬрд╛рд╡рд╛ рдХреЛрдб
 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.StringTokenizer; public class easy_chess_va_wa { BufferedReader br; StringTokenizer st; PrintWriter out; public String nextToken() throws IOException { while (st == null || !st.hasMoreTokens()) { st = new StringTokenizer(br.readLine()); } return st.nextToken(); } public int nextInt() throws IOException { return Integer.parseInt(nextToken()); } public class Cell { int x, y; public Cell(int x, int y) { this.x = x; this.y = y; } public String toString() { return (char) ('a' + x) + "" + (y + 1); } } public void solve() throws IOException { int n = nextInt() + 1; ArrayList<Cell> cells = new ArrayList<>(); int k = Math.min(8 * 8, n + 4); if (k <= 8 * 7) { for (int i = 0; i < 7 && cells.size() < k; i++) { for (int j = 0; j < 8 && cells.size() < k; j++) { cells.add(new Cell(i % 2 == 0 ? j : 7 - j, i)); } } Cell last = cells.get(cells.size() - 1); if (last.x != 7) { cells.add(new Cell(last.x, 7)); } cells.add(new Cell(7, 7)); } else { for (int i = 0; i < 7; i++) { for (int j = 0; j < 8; j++) { cells.add(new Cell(i % 2 == 0 ? j : 7 - j, i)); } } for (int i = 0; i < 8; i++) { for (int j = 0; j < 2; j++) { cells.add(new Cell(i, i % 2 == 0 ? 7 - j : 6 + j)); } } Cell last = cells.get(cells.size() - 1); if (last.y != 7) { cells.add(new Cell(last.x, 7)); } cells.add(new Cell(7, 7)); } while (cells.size() > n) { cells.remove(1); } for (Cell cell : cells) { out.print(cell + " "); } } public void run() { try { br = new BufferedReader(new InputStreamReader(System.in)); out = new PrintWriter(System.out); solve(); out.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new easy_chess_va_wa().run(); } } 


рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ ред рд╡рд╣рд╛рдВ рдЖрдк рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рдЬреЛ рдХреЛрдб рд╕реБрдЭрд╛рдпрд╛ рдерд╛, рд╡рд╣ рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣реИ , рдФрд░ рдпрд╣рд╛рдВ рдЖрдк рдЙрди рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдУрд▓рдВрдкрд┐рдпрд╛рдб рдХреЗ рджреМрд░рд╛рди, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рд╕реЗрдЯ рдкрд░ рдХреЛрдб рдХреЛ "рдЪреЗрдХ" рдХрд┐рдпрд╛ред рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдЕрдВрдХ рджрд┐рдП рдЧрдП рдереЗред рдЕрдиреНрдпрдерд╛, рдЯреАрдо рдиреЗ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдФрд░ рдХреЛрдб рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрди рдХрд░ рд╕рдХрддреА рд╣реИред

ICPC рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬрд┐рд╕ рдЯреАрдо рдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдЬреАрдд рдЬрд╛рддреА рд╣реИред

рдпрджрд┐ рдХрдИ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рдПрдХ рд╣реА рд╕рдордп рдкрд░ рд╕рдорд╛рди рдЕрдВрдХ рдмрдирд╛рдП, рддреЛ рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ рдореЗрдВ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рджрдВрдб рдХреЗ рд╕рдордп рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рджрдВрдб рдХрд╛ рд╕рдордп рдЕрд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдмреАрддреЗ рд╣реБрдП рд╕рдордп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдб рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рджреЗрддрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рд░реНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдЬреБрд░реНрдорд╛рдиреЗ рдореЗрдВ 20 рдорд┐рдирдЯ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ рдЕрдВрдд рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред рдпрджрд┐ рдЯреАрдо рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХреА рдкреЗрд╢рдХрд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рддреЛ рдХреЛрдИ рджрдВрдб рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


icpcnews / рдлрд╝реНрд▓рд┐рдХрд░ / рд╕реАрд╕реА рдмрд╛рдп / рдлрд╝рд╛рдЗрдирд▓ ICPC-2017

рдлрд╛рдЗрдирд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреНрдпрд╛ рд╣реЛрдЧреА?


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рд╣реИ, рд╕реЗрдореАрдлрд╛рдЗрдирд▓ рдЪреИрдВрдкрд┐рдпрди - рдкрдВрджреНрд░рд╣ рдЯреАрдореЗрдВ - рдкреБрд░реНрддрдЧрд╛рд▓ рдореЗрдВ, рдкреЛрд░реНрдЯреЛ рд╢рд╣рд░ рдЬрд╛рдПрдВрдЧреА, рдЬрд╣рд╛рдВ рд╡реЗ рд╡рд┐рд╢реНрд╡ рдХрдк рдФрд░ $ 15,000 рдХреЗ рд▓рд┐рдП рд▓рдбрд╝реЗрдВрдЧреЗред рдкрд╣рд▓реА рд╕реЗ рдЪреМрдереА рддрдХ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЯреАрдореЛрдВ рдХреЛ рд╕реНрд╡рд░реНрдг рдкрджрдХ рд╕реЗ рд╕рдореНрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд╛рдВрдЪрд╡реЗрдВ рд╕реЗ рдЖрдард╡реЗрдВ рд╕реНрдерд╛рди рдкрд░ "рд╕рдорд╛рдкреНрдд" рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рд░рдЬрдд рдкрджрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ, рдФрд░ рдиреМрд╡реЗрдВ рд╕реЗ рдмрд╛рд░рд╣рд╡реЗрдВ - рдХрд╛рдВрд╕реНрдп рддрдХред рдЙрдирдХреЗ рд▓рд┐рдП рдирдХрдж рдкреБрд░рд╕реНрдХрд╛рд░ рднреА рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

ITMO рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА рдЯреАрдо рд╕рд╛рдд рдмрд╛рд░ (рдЖрдЦрд┐рд░реА - 2017 рдореЗрдВ) ICPC рдХреА рдЪреИрдВрдкрд┐рдпрди рдмрди рдЧрдИ рд╣реИред рдпрд╣ рдПрдХ рд╡рд┐рд╢реНрд╡ рд░рд┐рдХреЙрд░реНрдб рд╣реИ рдЬрд┐рд╕реЗ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рд╣рд░рд╛рдпрд╛ рд╣реИ: рдЪреИрдВрдкрд┐рдпрди рдЦрд┐рддрд╛рдмреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рднреА рдЪрд╛рд░ рдХрдк рдХреЗ рд╕рд╛рде рд╣рдорд╡рддрди, рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рд╕реНрдЯреЗрдЯ рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА, рдФрд░ рдирд┐рдХрдЯрддрдо рд╡рд┐рджреЗрд╢реА рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА, рдЕрдореЗрд░рд┐рдХреА рд╕реНрдЯреИрдирдлреЛрд░реНрдб рдФрд░ рдЪреАрдиреА рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдЬреЛрдУ рдЯреЛрдВрдЧ - рддреАрди рдЬреАрдд рд╣реИрдВред рд▓рдЧрд╛рддрд╛рд░ рд╕рд╛рдд рд╡рд░реНрд╖реЛрдВ рддрдХ, рд╡рд┐рд╢реНрд╡ рдлрд╛рдЗрдирд▓ рд▓рдЧрд╛рддрд╛рд░ рд░реВрд╕реА рдЯреАрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдЬреАрддрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ ICPC 2019 рдореЗрдВ рд▓реЛрдЧ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдПрдВрдЧреЗред

рд╣рдорд░реЗ рдкрд░ рдФрд░ рдХреНрдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

Source: https://habr.com/ru/post/hi433644/


All Articles