제출 #1217935

#제출 시각아이디문제언어결과실행 시간메모리
1217935qwusha봉쇄 시간 (IOI23_closing)C++17
8 / 100
110 ms21896 KiB
#include <bits/stdc++.h>
#include "closing.h"
using namespace std;
#define fi first
#define se second
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
ll inf = 1e18;

ll n, x, y, k;
vector<vector<pair<ll,ll>>> g;
vector<ll> dist;



int max_score(int N, int X, int Y, ll K, vector<int> U, vector<int> V, vector<int> W) {
    n = N;
    x = X;
    y = Y;
    k = K;
    g.assign(N, {});
    for (int i = 0; i < U.size(); i++) {
        g[V[i]].push_back({U[i], W[i]});
        g[U[i]].push_back({V[i], W[i]});
    }
    dist.assign(n, inf);
    set<pair<ll, ll>> st;
    dist[x] = 0;
    dist[y] = 0;
    st.insert({0,x});
    st.insert({0,y});
    while (!st.empty()) {
        auto [d, ve] = *st.begin();
        st.erase({d, ve});
        for (auto [uv, le] : g[ve]) {
            if (dist[uv] > d + le) {
                st.erase({dist[uv], uv});
                dist[uv] = d + le;
                st.insert({dist[uv], uv});
            }
        }
    }
    sort(dist.begin(), dist.end());
    int cnt = 0;
    for (int i = 0; i < n; i++) {
        if (dist[i] <= k) {
            cnt++;
            k -= dist[i];
        }
    }
    return 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...