Submission #394883

#TimeUsernameProblemLanguageResultExecution timeMemory
394883SugardorjSwapping Cities (APIO20_swap)C++14
0 / 100
2083 ms8124 KiB
#include "swap.h" #include <bits/stdc++.h> using namespace std; long long i,j,s,t; long long link[261523],size[234567],c[234567],a[234567],l=12345678,r,tt,k,y,z,n,m,x; pair<long long,long long>p[234567]; 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=U[i]*l+V[i]; } sort (p,p+m); } long long find(long long x) { while (x != link[x]) x = link[x]; return x; } bool same(long long x, long long y) { return find(x) == find(y); } void unite(long long x, long long y) { x = find(x); y = find(y); if (size[x] < size[y]) swap(x,y); size[x] += size[y]; if (c[x]+c[y]>0) c[x]=1; link[y] = x; } int getMinimumFuelCapacity(int u, int v) { for (i = 1; i<=n; i ++){ link[i]=i; size[i]=1; c[i]=0; a[i]=0; } for (i = 0; i <m; i ++){ x=p[i].second/l; y=p[i].second%l; a[x]++; a[y]++; if (find(x)==find(y)||a[x]>2||a[y]>2){ c[find(x)]=1; } unite(x,y); if (find(u)==find(v)&&c[find(u)]==1){ return p[i].first; } } 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...