Submission #1101943

#TimeUsernameProblemLanguageResultExecution timeMemory
1101943yoav_sVillage (BOI20_village)C++17
6 / 100
137 ms27336 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<ll> v; typedef vector<v> vv; typedef vector<vv> vvv; typedef pair<ll, ll> p; typedef vector<p> vp; typedef vector<vp> vvp; typedef vector<vvp> vvvp; typedef pair<ll, p> tri; typedef vector<tri> vtri; typedef vector<vtri> vvtri; typedef vector<vvtri> vvvtri; typedef vector<bool> vb; typedef vector<vb> vvb; typedef vector<vvb> vvvb; #define f first #define s second #define pb push_back #define eb emplace_back #define all(v) (v).begin(),(v).end() const ll INF = 1e18; const ll mod = 1e9 + 7; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ll N; cin >> N; vv graph(N); for (ll i = 0; i < N - 1; i++) { ll a, b; cin >> a >> b; a--; b--; graph[a].pb(b); graph[b].pb(a); } vtri distances; for (ll i = 0; i < N; i++) { vb visited(N, false); stack<p> dfs; dfs.emplace(i, 0); while (!dfs.empty()) { auto top = dfs.top(); dfs.pop(); if (visited[top.f]) continue; visited[top.f] = true; distances.eb(top.s, p(i, top.f)); for (ll x : graph[top.f]) dfs.emplace(x, top.s + 1); } } sort(all(distances), greater<tri>()); vb takenFirst(N,false), takenLast(N, false); v availableFirst, availableLast; ll res = 0; v perm(N); for (auto x : distances) { if (takenFirst[x.s.f] || takenLast[x.s.s]) continue; if (availableFirst.size() == 2 && availableFirst[0] + availableFirst[1] - x.s.f == availableLast[0] + availableLast[1] - x.s.s) continue; takenFirst[x.s.f] = true; takenLast[x.s.s] = true; availableFirst = v(); availableLast = v(); for (ll i = 0; i < N; i++) { if (!takenFirst[i]) availableFirst.pb(i); if (!takenLast[i]) availableLast.pb(i); } perm[x.s.f] = x.s.s; res += x.f; } cout << N << " " << res << "\n"; for (ll i = 0; i < N; i++) cout << "1 "; cout << "\n"; for (ll x : perm) cout << x + 1 << " "; cout << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...