Submission #1173939

#TimeUsernameProblemLanguageResultExecution timeMemory
1173939NomioMag (COCI16_mag)C++20
0 / 120
244 ms48196 KiB
#include<bits/stdc++.h> #define s second #define f first using namespace std; using ll = long long; const int maxn = 1e6 + 1; int p[maxn], sz[maxn], a[maxn], b[maxn]; ll mul[maxn], c[maxn]; int find(int x) { if(p[x] == x) return x; return p[x] = find(p[x]); } int unite(int u, int v) { u = find(u); v = find(v); if(u == v) return 0; if(sz[u] > sz[v]) swap(u, v); p[u] = v; sz[v] += sz[u]; mul[v] *= mul[u]; return v; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for(int i = 1; i < n; i++) { cin >> a[i] >> b[i]; } ll P = 1e18, Q = 1; for(int i = 1; i <= n; i++) { cin >> c[i]; P = min(c[i], P); sz[i] = 1; p[i] = i; mul[i] = c[i]; } vector<pair<ll, pair<int, int>>> vec; for(int i = 1; i < n; i++) { vec.push_back({1LL * c[a[i]] * c[b[i]], {a[i], b[i]}}); } sort(vec.begin(), vec.end()); for(pair<ll, pair<int, int>> pp : vec) { ll Mul = pp.f; int u = pp.s.f; int v = pp.s.s; int V = unite(u, v); if(V == 0) continue; if(mul[V] * Q < P * sz[V]) { P = mul[V]; Q = sz[V]; ll g = __gcd(P, Q); P /= g; Q /= g; } } cout << P << '/' << Q << '\n'; 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...