Submission #1362253

#TimeUsernameProblemLanguageResultExecution timeMemory
1362253vjudge1Swapping Cities (APIO20_swap)C++20
17 / 100
2094 ms33420 KiB
#include<bits/stdc++.h>
#include "swap.h"

using namespace std;

#define ll long long
const int maxn=1e5+5;
ll n,m,f=0;
vector<pair<ll,ll>>v[maxn];
vector<ll>dep,lo;
void init(int N, int M,
          std::vector<int> U, std::vector<int> V, std::vector<int> W) {
    n=N,m=M;
    for(int i=0;i<m;i++){
        v[U[i]].push_back({V[i],W[i]});
        v[V[i]].push_back({U[i],W[i]});
    }
}
void dfs(ll x,ll last,vector<vector<ll>>&adj,ll y){
    if(f&&dep[y]) return;
    if(last==-1) dep[x]=lo[x]=1;
    else dep[x]=lo[x]=dep[last]+1;
    for(auto i:adj[x]){
        if(i==last) continue;
        if(dep[i]==0){
            dfs(i,x,adj,y);
            lo[x]=min(lo[x],lo[i]);
        }
        else lo[x]=min(lo[x],dep[i]);
    }
    if(lo[x]<dep[x]||adj[x].size()>2) f=1;
}
bool solve(ll sz,ll X,ll Y){
    lo.clear();
    dep.clear();
    dep.resize(n+5);
    lo.resize(n+5);
    f=0;
    vector<vector<ll>>adj;
    for(int i=0;i<n;i++){
        adj.push_back({});
        for(auto j:v[i]) if(j.second<=sz) adj.back().push_back(j.first);
    }
    dfs(X,-1,adj,Y);
    if(dep[Y]) return f;
    return 0;
}
int getMinimumFuelCapacity(int X, int Y) {
    ll l=0,r=1e9+1;
    while(l<r){
        ll mid=(l+r)/2;
        if(solve(mid,X,Y)) r=mid;
        else l=mid+1;
    }
    return ((r==1e9+1)?-1:r);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...