# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
840871 | 2023-08-31T19:46:51 Z | Mohmad_Zaid | 봉쇄 시간 (IOI23_closing) | C++17 | 0 ms | 0 KB |
#include "closing.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back vector<vector<pair<int,int>>>g; struct triple{ int first,second; ll curr; }; int max_score(int N, int X, int Y, long long K,vector<int> U, vector<int> V, vector<int> W) { int n=N; dis.clear(); g.resize(n,vector<pair<int,int>>()); for(int i=0;i<n;i++){ g[U[i]].pb({V[i],W[i]}); g[V[i]].pb({U[i],W[i]}); } queue<triple>q; triple one; one.first=X; one.second=X; one.curr=0; triple two; two.first=Y; two.second=Y; two.curr=0; q.push(one); q.push(two); while(!q.empty()){ int p=q.front().first; int v=q.front().second; ll cur=q.front().curr; q.pop(); for(auto i:g[v]){ if(i.first==p)continue; if(cur+i.second>K)break; dis.insert(cur+i.second); triple temp; temp.first=v; temp.second=i.first; temp.curr=i.second+cur; } } int ans=0; for(auto i:dis){ if(i>K)break; ans++; K-=i; } return ans+2; }