제출 #960378

#제출 시각아이디문제언어결과실행 시간메모리
960378Prieved1봉쇄 시간 (IOI23_closing)C++17
8 / 100
95 ms34088 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; const int MAXN=200010; vector<pair<int,int>> g[MAXN]; long long distX[MAXN], distY[MAXN]; void dfsx(int at, int p) { for(auto [to,w]:g[at]) { if(to==p)continue; distX[to]=distX[at]+w; dfsx(to, at); } } void dfsy(int at, int p) { for(auto [to,w]:g[at]) { if(to==p)continue; distY[to]=distY[at]+w; dfsy(to, at); } } 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-1;i++) { g[U[i]].push_back({V[i], W[i]}); g[V[i]].push_back({U[i], W[i]}); } dfsx(X, -1); dfsy(Y, -1); int ans=0; // case 1 { int cnt=0; priority_queue<long long> pq; for(int i = 0;i<N;i++) { pq.push(-distX[i]); pq.push(-distY[i]); } long long sum=0; while(sum<=K) { sum-=pq.top(); cnt++; pq.pop(); if(sum<=K)ans=max(ans,cnt); } } for(int i = 0;i<=N;i++) { distX[i]=distY[i]=0; g[i].clear(); } 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...