Submission #1059649

#TimeUsernameProblemLanguageResultExecution timeMemory
1059649noyancanturk봉쇄 시간 (IOI23_closing)C++17
8 / 100
77 ms35464 KiB
#include "closing.h" #include<bits/stdc++.h> using namespace std; #define pb push_back const int lim=2e5+100; using lint=long long; using pii=pair<lint,lint>; int n; vector<pii>v[lim]; vector<lint>ds; void dfs(int node,int par){ for(auto[j,c]:v[node]){ if(j==par)continue; ds[j]=ds[node]+c; dfs(j,node); } } vector<lint>getdist(int root){ ds=vector<lint>(n); dfs(root,-1); return ds; } int max_score(int N, int X, int Y, long long K, std::vector<int> U, std::vector<int> V, std::vector<int> W) { n=N; for(int i=0;i<n;i++){ v[i].clear(); } for(int i=0;i<n-1;i++){ v[U[i]].pb({V[i],W[i]}); v[V[i]].pb({U[i],W[i]}); } vector<lint>dist1=getdist(X),dist2=getdist(Y); if(2*K<dist1[Y]){ //case 1 priority_queue<pii,vector<pii>,greater<pii>>pq; pq.push({0,X}); pq.push({0,Y}); bool vis[n]{}; int ans=0; while(pq.size()){ auto[c,node]=pq.top(); pq.pop(); if(K<c)break; vis[node]=1; K-=c; ans++; for(auto[j,d]:v[node]){ if(vis[j])continue; pq.push({c+d,j}); } } return ans; }else{ //case 2 3 5 6 assert(0); return -1; } return -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...