Submission #1303370

#TimeUsernameProblemLanguageResultExecution timeMemory
1303370ThanhsVillage (BOI20_village)C++20
12 / 100
1096 ms12208 KiB
#include <bits/stdc++.h> using namespace std; #define name "TENBAI" #define fi first #define se second #define int long long #define endl '\n' #define setmin(x, y) x = min((x), (y)) #define setmax(x, y) x = max((x), (y)) #define sqr(x) ((x) * (x)) #define all(x) x.begin(), x.end() mt19937 hdp(chrono::high_resolution_clock::now().time_since_epoch().count()); int rand(int l, int r){return l + ((hdp() % (r - l + 1)) + r - l + 1) % (r - l + 1);} const int NM = 1e5 + 5; const int LG = 20; pair<int, int> st[NM][LG]; int n, dep[NM], tin[NM], timer; vector<int> g[NM]; void dfs(int u) { st[++timer][0] = {dep[u], u}; tin[u] = timer; for (int v : g[u]) { g[v].erase(find(all(g[v]), u)); dep[v] = dep[u] + 1; dfs(v); st[++timer][0] = {dep[u], u}; } } int lca(int u, int v) { u = tin[u], v = tin[v]; if (u > v) swap(u, v); int lg = __lg(v - u + 1); return min(st[u][lg], st[v - (1 << lg) + 1][lg]).se; } void solve() { cin >> n; for (int i = 1; i < n; i++) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } dfs(1); for (int i = 1; (1 << i) <= timer; i++) for (int j = 1; j + (1 << i) - 1 <= timer; j++) st[j][i] = min(st[j][i - 1], st[j + (1 << i - 1)][i - 1]); pair<int, vector<int>> mn, mx; mn.fi = 1e9, mx.fi = 0; vector<int> p(n); iota(all(p), 1); do { bool chet = 0; int sum = 0; for (int i = 1; i <= n; i++) { int j = p[i - 1]; if (i == j) chet = 1; sum += dep[i] + dep[j] - 2 * dep[lca(i, j)]; } if (chet) continue; setmin(mn, make_pair(sum, p)); setmax(mx, make_pair(sum, p)); }while(next_permutation(all(p))); cout << mn.fi << ' ' << mx.fi << endl; for (int t : mn.se) cout << t << ' '; cout << endl; for (int t : mx.se) cout << t << ' '; } signed main() { if (fopen("in.txt", "r")) { freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); } else if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int tc = 1; // cin >> tc; while (tc--) solve(); }

Compilation message (stderr)

Village.cpp: In function 'int main()':
Village.cpp:92:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   92 |         freopen("in.txt", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Village.cpp:93:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   93 |         freopen("out.txt", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Village.cpp:97:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |         freopen(name".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Village.cpp:98:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   98 |         freopen(name".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...