제출 #405947

#제출 시각아이디문제언어결과실행 시간메모리
405947Maqsut_03자매 도시 (APIO20_swap)C++17
0 / 100
145 ms15364 KiB
#include "swap.h"
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<deque>

#define ll int
#define pl pair<ll, ll> 
#define llv vector<ll>
#define pb push_back
#define ppb(x, y) push_back({x, y})
#define pv vector<pl>
#define sz size()
#define ss second
#define ff first

using namespace std;
const int N = 2 * 1e5 + 3;

ll q = 0, p = 0, n, m, a, b, c;
llv v(N);
pv v0[N];
pl w[N];
bool f = 1;

void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) 
{
    n = N;
    m = M;
    for (int i=0; i<m; i++) 
	{
    	v0[V[i]].ppb(U[i], W[i]);
    	v0[U[i]].ppb(V[i], W[i]);
	}
	  
	for (int i=0; i<n; i++)
	{
		if (v0[i].sz == 1) q++;
		if (v0[i].sz == 2) p++;
	}  
	if (q == 2 && q + p == n) f = 0;
	for (int i=0; i<m; i++)
	    	w[i] = {W[i], V[i]};
    
	for (int i=0; i<m; i++) v[w[i].ss] = w[i].ff;
	sort(w, w+m);
	a = w[0].ss;
	b = w[1].ss;
	c = w[2].ss;
	return ;
}

int getMinimumFuelCapacity(int X, int Y) 
{
	if (f == 0) return -1;
	ll ans;
	if ((X == a && Y == b) || (X == b && Y == a)) ans = c ;
	else if (X == a || Y == a) ans = b;
	else ans = a;
	ans = max({ans, v[Y], v[X]}); 
	return ans;
}
#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...