Submission #1166799

#TimeUsernameProblemLanguageResultExecution timeMemory
1166799kimClosing Time (IOI23_closing)C++20
8 / 100
59 ms21832 KiB
#include "closing.h"
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
#define f first
#define s second
#define eb emplace_back
#define sz(x) (int)x.size()
#define add(x,y) ((x+y)%md)
#define Add(x,y) (x=add(x,y))
#define mul(x,y) ((x*y)%md)
#define Mul(x,y) (x=mul(x,y))
const int inf=1e9;
const ll linf=1e18;
const ll md=1e9+7;

vector<pair<int,ll>> adj[200005];

using A=tuple<ll,int,int,ll>;
priority_queue<A,vector<A>,greater<A>> pq;
ll a[200005];

int dfs(int u,int p){
  int res=1;
  for(auto &[v,vw]:adj[u]) if(v!=p && vw<=a[v]) res+=dfs(v,u);
  return res;
}

int max_score(int N, int X, int Y, long long K,
              std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
  for(int i=0;i<N;++i) adj[i].clear(), a[i]=0;
  for(int i=0;i<N-1;++i) adj[U[i]].eb(V[i],W[i]), adj[V[i]].eb(U[i],W[i]);
  pq.emplace(0,X,-1,0), pq.emplace(0,Y,-1,0);
  ll sum=0;
  while(!pq.empty()){
    auto [w,u,p,w0]=pq.top(); pq.pop();
    if(w!=max(0LL,w0-a[u])){
      pq.emplace(max(0LL,w0-a[u]),u,p,w0);
      continue;
    }
    if(sum+w>K) continue;
    sum+=w;
    a[u]+=w;
    for(auto &[v,vw]:adj[u]) if(v!=p){
      pq.emplace(max(0LL,vw+w0-a[v]),v,u,vw+w0);
    }
  }
  return dfs(X,-1)+dfs(Y,-1);
}
#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...