제출 #1332868

#제출 시각아이디문제언어결과실행 시간메모리
1332868nerrrmin봉쇄 시간 (IOI23_closing)C++20
0 / 100
101 ms23884 KiB
#include "closing.h"
#define pb push_back
#include <bits/stdc++.h>
#include <vector>
using namespace std;
const int maxn = 2e5 + 10;
int n, x, y, k;
vector < pair < int, int > > g[maxn];
long long dist[maxn];
int used[maxn];
void dfs(int beg, long long dep)
{
    used[beg] = 1;
    dist[beg] = min(dist[beg], dep);
    for (auto &[to, w]: g[beg])
    {
        if(used[to])continue;
        dfs(to, dep + w);
    }
}
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;
    x = X;
    y = Y;
    k = K;
    for (int i = 0; i < n; ++ i)
        g[i].clear();
    for (int i = 0; i < n-1; ++ i)
    {
        int from = U[i];
        int to = V[i];
        int t = W[i];
        g[from].pb(make_pair(to, t));
        g[to].pb(make_pair(from, t));
    }
    for (int i = 0; i < n; ++ i)
        dist[i] = 1e18+1;
    for (int i = 0; i < n; ++ i)
        used[i] = 0;
    dfs(x, 0);
    for (int i = 0; i < n; ++ i)
        used[i] = 0;
    dfs(y, 0);
    vector < int > v;
    for (int i = 0; i < n; ++ i)
        v.pb(dist[i]);
    sort(v.begin(), v.end());

    for (int i = 0; i < v.size(); ++ i)
    {
        if(k > v[i])k -= v[i];
        else return i;
    }
    return n;
}
#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...