제출 #980173

#제출 시각아이디문제언어결과실행 시간메모리
980173vjudge1봉쇄 시간 (IOI23_closing)C++17
8 / 100
120 ms20524 KiB
#include "closing.h"
#include <bits/stdc++.h>

#include <vector>
#define MP make_pair
#define f first
#define s second
typedef long long ll;
using namespace std;

int dijkstra(int N, int X, int Y, ll K, vector<vector<pair<ll,ll>>> &g) {
    priority_queue <pair<ll,ll>, vector <pair<ll,ll>>, greater<pair<ll,ll>>> pq;
    pq.push(MP(0, X)); pq.push(MP(0, Y));
    int ans = 0;
    bool vis[N + 2];
    for (int i = 0; i < N + 2; i++) vis[i] = false;
    while (!pq.empty()) {
        while (!pq.empty() && vis[pq.top().s]) pq.pop();
        if (pq.empty()) break;
        auto p = pq.top();
        vis[p.s] = true;
        if (K >= p.f) {
            K -= p.f;
            ans++;
        }
        else break;

        for (auto &it : g[p.s]) {
            if (vis[it.f]) continue;
            pq.push(MP(p.f + it.s, it.f));
        }

    }
    return ans;
}

int max_score(int N, int X, int Y, long long K,
              std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
    vector <vector <pair<ll,ll>>> g(N + 2);
    for (int i = 0; i < N - 1; i++) {
        g[U[i]].push_back(MP(V[i], W[i]));
        g[V[i]].push_back(MP(U[i], W[i]));
    }

    return dijkstra(N, X, Y, K, g);
}
#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...