Submission #1200645

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

int n , m;
vector<int> u , v , w;
int mx = 0; 

struct LCA{
  vector<int> anc[20] , dep; 
  void init(vector<vector<int>> &adj , int n){
    for (auto &j : anc) j.resize(n); 
    dep.resize(n); 
    dfs(0 , -1 , adj); 
  }
  void dfs(int node , int par , vector<vector<int>> &adj){
    for (auto i : adj[node]){
      if (i == par) continue; 
      dep[i] = dep[node] + 1; 
      anc[0][i] = node; 
      for (int j = 1 ; j < 20 ; j++){
        anc[j][i] = anc[j-1][anc[j-1][i]]; 
      }
      dfs(i , node , adj); 
    }
  }
  int jump(int u , int k){
    for (int j = 19 ; j >= 0 ; j--){
      if (k & (1<<j)) u = anc[j][u]; 
    }
    return u; 
  }
  int lca(int u , int v){
    if (dep[u] > dep[v]) swap(u , v); 
    v = jump(v , dep[v] - dep[u]); 
    if (u == v) return u; 
    for (int j = 19 ; j >= 0 ; j--){
      if (anc[j][u] != anc[j][v]) u = anc[j][u], v = anc[j][v]; 
    }
    return anc[0][u]; 
  }
};

  LCA l; 


void init(int N, int M,vector<int> U, vector<int> V, vector<int> W) {
  n = N  , m = M , u = U , V = v , w = W; 
  if (m != n-1) return; 
  vector<vector<int>> adj(N); 
  for (int i = 0 ; i < M ; i++) adj[U[i]].push_back(V[i]),adj[V[i]].push_back(U[i]); 
  l.init(adj , N); 
}

int getMinimumFuelCapacity(int X, int Y) {
  if (m != n-1) return -1; 
  int c = l.lca(X , Y); 
  if (c != X && c != Y && l.dep[c]) return 0;
  else return -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...