Submission #137516

#TimeUsernameProblemLanguageResultExecution timeMemory
137516abacabaMag (COCI16_mag)C++14
12 / 120
509 ms132600 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 2e9; const int N = 1e6 + 15; int n, m, a[N], dp[N]; vector <int> g[N]; pair <int, int> ans = {inf, 1}; 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], 2LL + dp[to]}; if(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; } 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(a[i] < ans.first) ans = x; } 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...