Submission #245763

#TimeUsernameProblemLanguageResultExecution timeMemory
245763Vladikus004Kralj (COCI16_kralj)C++14
0 / 140
234 ms44920 KiB
#include <bits/stdc++.h> #define int long long #define inf 2e9 #define mp make_pair #define all(v) v.begin(), v.end() using namespace std; typedef long long ll; typedef long double ld; typedef pair <int, int> pii; const int N = 1000000 + 3; int n, z[N], p[N]; pair <ld, pii> dp[N], ans; vector <vector <int> > v; void solve1(int x, int pr){ p[x] = 1; for (auto u: v[x]){ if (p[u]) continue; if (pr != -1) dp[x] = min( mp(ld(dp[pr].second.first * z[x]) / (dp[pr].second.second + 1), mp(dp[pr].second.first * z[x], dp[pr].second.second + 1)), mp(ld(z[x]), mp(z[x], 1LL)) ); else dp[x] = {ld(z[x]), {z[x], 1}}; solve1(u, x); } ans = min(ans, dp[x]); } void solve2(int x, int pr){ p[x] = 1; for (auto u: v[x]){ if (p[u]) continue; if (pr != -1) dp[x] = max( mp(ld(dp[pr].second.first * z[x]) / (dp[pr].second.second + 1), mp(dp[pr].second.first * z[x], dp[pr].second.second + 1)), mp(ld(z[x]), mp(z[x], 1LL)) ); else dp[x] = {ld(z[x]), {z[x], 1}}; int gc = __gcd(dp[x].second.first, dp[x].second.second); dp[x].second.first /= gc; dp[x].second.second /= gc; solve2(u, x); } ans = min(ans, dp[x]); } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); #ifdef LOCAL freopen("input.txt", "r", stdin); #endif // LOCAL cin >> n; v.resize(n); int st = -1; for (int i = 0; i < n - 1; i++){ int a, b; cin >> a >> b; --a; --b; v[a].push_back(b); v[b].push_back(a); } for (int i = 0; i < n; i++) if (v[i].size() == 1) st = i; for (int i = 0; i < n; i++) cin >> z[i]; ans = {inf * inf, {inf, inf}}; if (n <= 1000){ for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++) dp[j] = {inf * inf, {inf, inf}}, p[j] = 0; solve1(i, -1); } }else{ for (int i = 0; i < n; i++) dp[i] = {inf * inf, {inf, inf}}; solve2(st, -1); } cout << ans.second.first << "/" << ans.second.second << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...