제출 #913508

#제출 시각아이디문제언어결과실행 시간메모리
913508abcvuitunggio봉쇄 시간 (IOI23_closing)C++17
8 / 100
336 ms40384 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; vector <pair <int, int>> ke[200001]; long long d[200001][2],cur; int p[200001],ch[200001],vis[200001]; priority_queue <pair <long long, int>, vector <pair <long long, int>>, greater <pair <long long, int>>> q; void dfs(int u, int i, int par=-1){ for (auto [v,w]:ke[u]) if (v!=par){ d[v][i]=d[u][i]+w; p[v]=u; dfs(v,i,u); } } int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W){ for (int i=0;i<N-1;i++){ ke[U[i]].push_back({V[i],W[i]}); ke[V[i]].push_back({U[i],W[i]}); } memset(ch,0,sizeof(ch)); d[X][0]=d[Y][1]=0; dfs(X,0); dfs(Y,1); for (;X!=Y;X=p[X]) ch[X]=1; ch[Y]=1; int res=0,cnt=0; for (int i=0;i<N;i++) q.push({min(d[i][0],d[i][1]),i}); cur=0; while (!q.empty()&&cur+q.top().first<=K){ cur+=q.top().first; res++; q.pop(); } while (!q.empty()) q.pop(); cur=0; for (int i=0;i<N;i++){ if (ch[i]){ q.push({abs(d[i][0]-d[i][1])*2,i}); cur+=min(d[i][0],d[i][1]); cnt++; } else q.push({max(d[i][0],d[i][1]),i}); } while (!q.empty()&&cur+q.top().first/(ch[q.top().second]+1)<=K){ int u=q.top().second; cur+=q.top().first/(ch[u]+1); cnt+=2-ch[u]; vis[u]=1; q.pop(); } while (!q.empty()) q.pop(); for (int i=0;i<N;i++) if (!vis[i]) q.push({(ch[i]?max(d[i][0],d[i][1]):min(d[i][0],d[i][1])),i}); while (!q.empty()&&cur+q.top().first<=K){ cur+=q.top().first; cnt++; q.pop(); } while (!q.empty()) q.pop(); for (int i=0;i<N;i++) ke[i].clear(); return max(res,(cur>K?0:cnt)); }
#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...