제출 #927292

#제출 시각아이디문제언어결과실행 시간메모리
927292TAhmed33자매 도시 (APIO20_swap)C++17
37 / 100
2013 ms23744 KiB
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 25;
vector <pair <int, int>> adj[MAXN];
vector <int> adj2[MAXN];
bool vis[MAXN];
int deg[MAXN];
vector <int> t;
int n;
void init (int N, int m, vector <int> u, vector <int> v, vector <int> w) {
	t = w; sort(t.begin(), t.end());
	n = N;
	for (int i = 0; i < m; i++) {
		adj[u[i]].push_back({v[i], w[i]});
		adj[v[i]].push_back({u[i], w[i]});
	}
}
bool flag;
int cnt2 = 0;
void dfs (int pos) {
	vis[pos] = 1;
	flag |= deg[pos] > 2;
	//cout << pos << " " << deg[pos] << '\n';
	cnt2 += deg[pos] == 1;
	for (auto j : adj2[pos]) {
		if (!vis[j]) {
			dfs(j);
		}
	}
}
int getMinimumFuelCapacity (int x, int y) {
	int l = 0, r = (int)t.size() - 1, ans = -1;
	while (l <= r) {
		int mid = (l + r) >> 1;
		for (int i = 0; i < n; i++) {
			adj2[i].clear(); vis[i] = 0; deg[i] = 0;
			for (auto [h, z] : adj[i]) {
				if (z <= t[mid]) {
					adj2[i].push_back(h);
					deg[i]++;
				}
			}
			//cout << (int)adj[i].size() << " " << deg[i] << ": " << (int)adj2[i].size() << '\n';
		}
		flag = 0; cnt2 = 0;
		dfs(x);
		//cout << flag << " " << cnt2 << '\n';
		if (!vis[y] || (!flag && cnt2 == 2)) {
			l = mid + 1;
		} else {
			r = mid - 1; ans = mid;
		}
	}
	return ans == -1 ? -1 : t[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...