Submission #1194377

#TimeUsernameProblemLanguageResultExecution timeMemory
1194377Ak_16Closing Time (IOI23_closing)C++20
8 / 100
92 ms35652 KiB
#include <iostream>
#include <vector>
#include "closing.h"
#include <algorithm>
using namespace std;
#define ll long long

struct edg{
  int no;
  ll len;
};

int tot1;
int tot2;
vector<edg> adj[200005];
ll disa[200005];
ll disb[200005];
int vis[200005];


ll cos1[200005];
ll cos2[200005];
ll ne[200005];
ll sm;

void dfs1(int nod, ll di){
  vis[nod] = 1;
  disa[nod] = di;
  for(auto edge : adj[nod]){
    int n1 = edge.no;
    int n2 = edge.len;
    if(vis[n1]==0){
      dfs1(n1, di+n2);
    }
  }
  
}

void dfs2(int nod, ll di){
  vis[nod] = 1;
  disb[nod] = di;
  for(auto edge : adj[nod]){
    int n1 = edge.no;
    int n2 = edge.len;
    if(vis[n1]==0){
      dfs2(n1, di+n2);
    }
  }
  
}



int max_score(int n, int x, int y, ll k, vector<int> u, vector<int> v, vector<int> w){
  
  for(int i=0; i<n; i++){adj[i].clear();}
  
  for(int i=0; i<n-1; i++){
    adj[u[i]].emplace_back(edg{v[i],1LL * w[i]});
    adj[v[i]].emplace_back(edg{u[i],1LL * w[i]});
  }
  
  for(int i=0; i<n; i++){
    vis[i]=0;
    disa[i]=0LL;
    disb[i]=0LL;
  }
  
  dfs1(x, 0LL);
  
  for(int i=0; i<n; i++){
    vis[i]=0;
  }
  
  dfs2(y,0LL);
  
  for(int i=0; i<n; i++){
    cos1[i] = min(disa[i], disb[i]);
    cos2[i] = max(disa[i], disb[i]);
  }
  
  for(int i=0; i<n; i++){
    ne[i] = cos1[i];
  }
  
  sort(ne, ne+n);
  

  tot1=0;
  
  sm=0LL;
  for(int i=0; i<n; i++){
    if(sm+ne[i]<=k){
      sm += ne[i]; tot1++;
    }
  }
  
  tot2=0;
  
  
  
  return max(tot1, tot2);
  
}
#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...