Submission #1200861

#TimeUsernameProblemLanguageResultExecution timeMemory
1200861Braabebo10Swapping Cities (APIO20_swap)C++20
37 / 100
2095 ms27552 KiB
#include "swap.h"
#include<bits/stdc++.h>
#define ll long long
#define nl "\n"
#define all(v) v.begin(),v.end()
#define baraa ios_base::sync_with_stdio(false);cin.tie(NULL);
using namespace std;
vector<vector<array<ll, 3> > > adj;
ll n, m;
vector<ll> weights;

void init(int N, int M,
          std::vector<int> U, std::vector<int> V, std::vector<int> W) {
    n = N, m = M;
    adj = vector<vector<array<ll, 3> > >(n + 1);
    for (ll i = 0; i < m; i++) {
        adj[U[i]].push_back({V[i], W[i], i});
        adj[V[i]].push_back({U[i], W[i], i});
        weights.push_back(W[i]);
    }
    sort(all(weights));
    weights.erase(unique(all(weights)), weights.end());
}

int getMinimumFuelCapacity(int x, int y) {
    ll l = 0, r = weights.size() - 1, ans = -1;
    while (l <= r) {
        ll mid = (l + r) / 2, ok = 0, ok2 = 0, all = 0, nodes = 0;
        vector<ll> vis(n + 1, 0);
        function<void(ll)> dfs = [&](ll u) {
            if (vis[u])return;
            vis[u] = 1;
            ok |= (u == y);
            ll cnt = 0;
            nodes++;
            for (auto [v, w, idx]: adj[u])
                if (w <= weights[mid])
                    dfs(v), cnt++;
            ok2 |= (cnt >= 3);
            all += cnt;
        };
        dfs(x);
        if (ok and (ok2 or (all / 2) > nodes - 1))ans = weights[mid], r = mid - 1;
        else l = mid + 1;
    }
    return ans;
}
#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...