Submission #1200814

#TimeUsernameProblemLanguageResultExecution timeMemory
1200814Mohamed_Kachef06Swapping Cities (APIO20_swap)C++17
0 / 100
2097 ms45656 KiB
#include "swap.h"
#include <bits/stdc++.h>
using namespace std;
#include <vector>
#define all(x) x.begin() , x.end()

int n , m;
vector<signed> u , v , w;
vector<vector<array<int ,3>>> adj; 
int mx = 0; 

void init(signed N, signed M,vector<signed> U, vector<signed> V, vector<signed> W) {
  n = N , m = M , u = U , v = V , w = W; 
  adj.assign(n , {}); 
  for (int 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}); 
    mx = max(mx , W[i]); 
  }
  int cnt = M; 
  for (int i = 0 ; i < N ;  i++) adj[i].push_back({i , 0 , cnt++}); 
}

bool vis[1000][1000];

void dfs(int x , int y , int md){
  if (vis[x][y]) return;
  vis[x][y] = 1; 
  for (auto [i , d , id1] : adj[x]){
    for (auto [j , e , id2] : adj[y]){
      if (d > md || e > md || i == j || id1 == id2) continue;
      dfs(i , j, md);  
    }
  }
}

bool check(int x , int y , int md){
   if (md > 1e9) return 0;
   for (int i = 0 ; i < n ; i++){
    for (int j = 0 ; j < n ; j++) vis[i][j] = 0;
   }
     dfs(x , y , md);
    return vis[y][x]; 
}

signed getMinimumFuelCapacity(signed X, signed Y) {
  if (!check(X , Y , 1e9)) return -1; 
  long long l = 0 , r = 1e9 , md;
  while(l<=r){
    md = (l+r)/2; 
    if (check(X , Y , md)) r = md-1;
    else l = md+1; 
  }
  return (r + 1 > 1e9 ? -1 : r+1);
}
#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...