제출 #974683

#제출 시각아이디문제언어결과실행 시간메모리
974683XXBabaProBerkay자매 도시 (APIO20_swap)C++17
37 / 100
2061 ms20888 KiB
#include "swap.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;

#define F first
#define S second

using ll = long long;

bool ans;
vector<bool> vis;
vector<vector<pair<int, int>>> adj;

void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) //init(N, M, U, V, W)
{
	adj.resize(N);
	vis.resize(N);
	for (int i = 0; i < M; i++)
	{
		adj[U[i]].emplace_back(V[i], W[i]);
		adj[V[i]].emplace_back(U[i], W[i]);
	}
}

void DFS(int k, int p, int& s, int& t, int& x)
{
	if (vis[k])
	{
		ans = 1;
		return;
	}

	int c = 0;
	vis[k] = 1;
	for (auto i : adj[k])
		if (i.S <= x && i.F != p)
		{
			c++;
			DFS(i.F, k, s, t, x);
		}

	ans |= (k != t && k != s && c > 1);
}

int getMinimumFuelCapacity(int X, int Y)
{
	int l = 1, r = 1e9;
	while (l <= r)
	{
		int m = (l + r) >> 1;
		ans = 0;
		fill(vis.begin(), vis.end(), 0);

		DFS(X, X, X, Y, m);

		if (ans && vis[Y])
			r = m - 1;
		else
			l = m + 1;
	}

	return (l < 1e9 ? l : -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...