Submission #137552

#TimeUsernameProblemLanguageResultExecution timeMemory
137552abacabaMag (COCI16_mag)C++14
48 / 120
541 ms140152 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 2e18; const int N = 1e6 + 15; int n, m, a[N], dp[N], dpup[N]; vector <int> g[N]; pair <int, int> ans = make_pair(0LL, 0LL); void dfs(int v, int p = -1) { for(int to : g[v]) { if(p != to) { dfs(to, v); pair <int, int> x = {a[v] * a[to], dpup[v] + 2LL + dp[to]}; if(ans == make_pair(0LL, 0LL) || x.first * ans.second < ans.first * x.second) { ans = x; int c = __gcd(x.first, x.second); if(c) ans.first /= c, ans.second /= c; } } } pair <int, int> x = {a[v], dpup[v] + 1LL + dp[v]}; if(ans == make_pair(0LL, 0LL) || x.first * ans.second < ans.first * x.second) { ans = x; int c = __gcd(x.first, x.second); if(c) ans.first /= c, ans.second /= c; } } void calc(int v, int p = -1) { if(p != -1 && a[p] == 1) dpup[v] = dpup[p] + 1; for(int to : g[v]) if(to != p) { calc(to, v); if(a[to] == 1) dp[v] = max(dp[v], dp[to] + 1); } } #undef int int main() { #define int long long ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); 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); } for(int i = 1; i <= n; ++i) { cin >> a[i]; pair <int, int> x = {a[i], 1LL}; if(ans == make_pair(0LL, 0LL) || a[i] < ans.first) ans = x; } calc(1); dfs(1); cout << ans.first << '/' << ans.second << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...