Submission #1305586

#TimeUsernameProblemLanguageResultExecution timeMemory
1305586coolboy19521Swapping Cities (APIO20_swap)C++20
6 / 100
60 ms11424 KiB
#include "swap.h"
#include "bits/stdc++.h"

#define FOR(i,a,b)for(int i=(a);i<(b);i++)
#define F0R(i,a)FOR(i,0,a)
#define ROF(i,a,b)for(int i=(b)-1;i>=(a);i--)
#define R0F(i,a)ROF(i,0,a)
#define REP(a)F0R(_,a)

using namespace std;

const int mxn=1e5+20;

vector<pair<int,int>>aj[mxn];
int n,mx;

void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) {
  n=N;
  mx=N==M?*max_element(begin(W),end(W)):-1;
  F0R(i,M){
    aj[U[i]].emplace_back(V[i],W[i]);
    aj[V[i]].emplace_back(U[i],W[i]);
  }
}

int getMinimumFuelCapacity(int X, int Y) {
  return mx;
  int l=1,r=1e9,bs=-1;
  while(l<=r){
    int mi=(l+r)>>1;
    vector<int>dis(n,0),loc(n,INT_MAX);
    queue<int>q;
    q.push(X);
    int cnt=0;
    while(not q.empty()){
      int u=q.front();
      q.pop();
      int f=INT_MAX,s=INT_MAX;
      for(auto&pr:aj[u])if(pr.second<=mi and dis[pr.first]==0 and pr.first!=X){
        if(pr.second<=f)s=f,f=pr.second;
        else if(pr.second<s)s=pr.second;
      }
      for(auto&pr:aj[u])if(pr.second<=mi){
        if(pr.first==Y)cnt++;
        if(dis[pr.first]==0 and pr.first!=X){
          dis[pr.first]=dis[u]+1;
          q.push(pr.first);
          if(u!=X){
            if(pr.second==f)loc[pr.first]=min({loc[pr.first],loc[u],s});
            else loc[pr.first]=min({loc[pr.first],loc[u],f});
          }
        }
      }
    }
    if(dis[Y]!=0 and (cnt>=2 or loc[Y]<INT_MAX))r=mi-1,bs=mi;
    else l=mi+1;
  }
  return bs;
}
#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...