Submission #878558

#TimeUsernameProblemLanguageResultExecution timeMemory
878558nikaa123Closing Time (IOI23_closing)C++17
8 / 100
108 ms30512 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; struct Arc {int v;int d;}; vector <Arc> gr[200000]; long long dist[400001]; long long d; int nd; bool fix[200000]; void dfs (int u) { fix[u] = 1; for (int i = 0; i < (int)gr[u].size(); i++) { int v = gr[u][i].v; if (!fix[v]) { nd++; d+=gr[u][i].d; dist[nd] = d; dfs(v); d-=gr[u][i].d; } } } int max_score(int N, int X, int Y, long long K, std::vector<int> U, std::vector<int> V, std::vector<int> W) { Arc tmp; for (int i = 0; i < N; i++) { gr[i].clear(); fix[i] = 0; } for (int i = 0; i <= 2*N; i++) { dist[i] = 0; } for (int i = 0; i < N; i++) { tmp.v=V[i]; tmp.d = W[i]; gr[U[i]].push_back(tmp); tmp.v=U[i]; gr[V[i]].push_back(tmp); } d = 0; nd = 0; dist[0] = 0; dfs(X); for (int i = 0; i < N; i++) { fix[i] = 0; } d = 0; nd++; dist[nd] = 0; dfs(Y); sort(dist,dist+nd+1); int ans = 0; long long sum = 0; for (int i = 0; i < 2*N; i++) { if (sum + dist[i] > K) { break; } else { sum += dist[i]; ans++; } } return ans; }
#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...