Submission #245733

#TimeUsernameProblemLanguageResultExecution timeMemory
245733Vladikus004Mag (COCI16_mag)C++14
24 / 120
478 ms130296 KiB
#include <bits/stdc++.h> #define inf 2e9 #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, x[N], d[N], dp[N], p[N], ans; vector <vector <int> > v; void dfs(int x){ pii mx = {0, 0}; p[x] = 1; for (auto u: v[x]){ if (p[u]) continue; dfs(u); mx = max(mx, {mx.first, dp[u]}); mx = max(mx, {dp[u], mx.first}); dp[x] = max(dp[x], dp[u]); } if (d[x]) { dp[x]++; ans = max(ans, mx.first + mx.second + 1); }else dp[x] = 0; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); #ifdef LOCAL freopen("input.txt", "r", stdin); #endif // LOCAL cin >> n; v.resize(n); 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++){ cin >> x[i]; if (x[i] == 1) d[i] = 1; } dfs(0); if (!ans){ ans = inf; for (int i = 0; i < n; i++) ans = min(ans, x[i]); cout << ans << "/1"; return 0; } cout << "1/" << ans; }
#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...