#include "closing.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
#define nl '\n'
#define ff first
#define ss second
#define ll long long
#define ld long double
#define terminator main
#define pll pair<ll,ll>
#define append push_back
#define pii pair<int,int>
#define all(x) (x).begin(),(x).end()
ll d[MAXN][2];
bool vis[MAXN];
vector<pii> a[MAXN];
void dfs(int v, int u, int t){
for(auto & [i, j] : a[v]){
if(i == u) continue;
d[i][t] = d[v][t] + j;
dfs(i, v, t);
}
}
int max_score(int n, int X, int Y, ll K,
vector<int> U, std::vector<int> V, vector<int> W){
ll k;
int x;
for(int i = 0; i < n - 1; i++){
a[V[i]].append({U[i], W[i]});
a[U[i]].append({V[i], W[i]});
}
dfs(X, -1, 0);
dfs(Y, -1, 1);
vector<pll> v, u;
for(int i = 0; i < n; i++){
v.append({min(d[i][0], d[i][1]), i});
u.append({max(d[i][0], d[i][1]), i});
}
int ans = 0;
sort(all(v));
sort(all(u));
for(int i = 0; i <= n; i++){
k = 0;
x = i * 2;
for(auto & j : v){
if(vis[j.ss]) continue;
if(k + j.ff > K) break;
k += j.ff;
x++;
}
ans = max(ans, x);
if(i == n) break;
K -= u[i].ff;
vis[u[i].ss] = 1;
if(K < 0) break;
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |