Submission #563130

#TimeUsernameProblemLanguageResultExecution timeMemory
563130AktanSwapping Cities (APIO20_swap)C++14
0 / 100
2 ms3412 KiB
#include "swap.h"
#include <bits/stdc++.h>
using namespace std;

#ifndef EVAL
#include "grader.cpp"
#endif

struct DSU{
	vector<int> p;
	vector<int> mx;
	DSU(int n) : p(n),mx(n){
		for(int i=0;i<n;i++){
			p[i]=i;
		}
	}
	int find(int x){
		if(p[x]==x){
			return x;
		}
		else{
			return p[x]=find(p[x]);
		}
	}
	void merge(int x,int y){
		int a=find(x),b=find(y);
		if(a==b){
			return;
		}
		else{
			mx[b]=max(mx[b],mx[a]);
			p[a]=b;
			return;
		}
	}
};
vector<int> e[100005];
DSU dsu(100005);
void init(int N, int M, vector<int> U, vector<int> V, vector<int> W){
	for(int i=0;i<M;i++){
		e[U[i]].push_back(V[i]);
		e[V[i]].push_back(U[i]);
		dsu.merge(U[i],V[i]);
		dsu.mx[dsu.find(V[i])]=max(dsu.mx[dsu.find(V[i])],W[i]);
	}
}

int getMinimumFuelCapacity(int X, int Y) {
	if(dsu.find(X)!=dsu.find(Y)){
		return -1;
	}
	else{
		return dsu.mx[dsu.find(X)];	
	}
}
#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...