# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
395324 | ankhbayar06 | Swapping Cities (APIO20_swap) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "swap.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define F first
#define S second
#define mk make_pair
int i,n,m,b[300000],t[300000],sz[300000],a[300000];
pair<int , pait<int , int>> p[300000];
void init(int N, int M, vector <int> U, vector <int> V, vector <int> W) {
n = N;
m = M;
for (i=0 ; i<m ; i++){
p[i].first=W[i];
p[i].second.first=U[i];
p[i].second.second=V[i];
}
sort (p,p+m);
}
int fnd(int xx){
if(xx==t[xx]){
return xx;
}
else t[xx]=fnd(t[xx]);
}
void negtge( int x , int y){
x=fnd(x);
y=fnd(y);
if(sz[x] < sz[y]){
swap(x,y);
}
sz[x]+=sz[y];
if(b[y]==1){
b[x]=1;
}
t[y]=x;
}
int getMinimumFuelCapacity(int u, int v){
for(i=0 ; i<n ; i++){
t[i]=i;
sz[i]=1;
b[i]=0;
a[i]=0;
}
for(i=0 ; i<m ; i++){
x=p[i].second.first;
y=p[i].second.second;
a[x]++;
a[y]++;
if(fnd(x)==fnd(y) || a[X]>2 || a[y]>2){
b[fnd(x)]=1;
b[fnd(y)]=1;
}
negtge(x,y);
if(fnd(u)==fnd(v) && b[fnd(u)]==1){
return p[i].first;
}
}
return -1;
}