Submission #46197

#TimeUsernameProblemLanguageResultExecution timeMemory
46197BruteforcemanPaprike (COI18_paprike)C++11
0 / 100
1079 ms4996 KiB
#include "bits/stdc++.h" using namespace std; int l[100010], r[100010]; int h[100010]; int par[100010]; long long cost[100010]; bool use[100010]; const long long inf = 1e15; int root(int x) { if(par[x] == x) return x; return par[x] = root(par[x]); } void join(int x, int y) { x = root(x); y = root(y); if(x != y) { par[x] = y; cost[y] += cost[x]; } } int main(int argc, char const *argv[]) { int n, k; cin >> n >> k; for(int i = 1; i <= n; i++) cin >> h[i]; for(int i = 1; i < n; i++) { cin >> l[i] >> r[i]; } for(int i = 1; i <= n; i++) { cost[i] = h[i]; par[i] = i; } int ans = n-1; for(int x = 1; x < n; x++) { int opt = -1; long long least = inf; for(int i = 1; i < n; i++) { if(use[i] == false) { long long c = cost[root(l[i])] + cost[root(r[i])]; if(opt == -1 || least > c) { least = c; opt = i; } } } if(least <= k) { join(l[opt], r[opt]); use[opt] = true; --ans; } else { break; } } printf("%d\n", ans); 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...