답안 #980274

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
980274 2024-05-12T02:25:42 Z Marcus 자매 도시 (APIO20_swap) C++17
0 / 100
1 ms 348 KB
#include <bits/stdc++.h>
using namespace std;

int n, m;
vector<tuple<int, int, int>> edge;

vector<int> link;
vector<int> volume;
vector<bool> swapable;
vector<int> degree;

int find(int x) {
    while (x != link[x]) x = link[x];
    return x;
}

bool same(int a, int b) {
    return find(a) == find(b);
}

void unite(int a, int b) {
    a = find(a);
    b = find(b);
    if (volume[a] < volume[b]) swap(a,b);
	degree[a]++; degree[b]++;
	if (degree[a] >= 3) swapable[a] = true;
	if (degree[b] >= 3) swapable[b] = true;
	volume[a] += volume[b];
	swapable[a] = swapable[a] || swapable[b];
    link[b] = a;
}

bool cmp(tuple<int, int, int> tul1, tuple<int, int, int> tul2)
{
	return (get<2>(tul1) < get<2>(tul2));
}

void init(int n1, int m1, vector<int> v, vector<int> u, vector<int> w) {
	n = n1;
	m = m1;
	for (int i=0; i<m; i++)
	{
		edge.push_back({v[i], u[i], w[i]});
		//edge.push_back({u[i], v[i], w[i]});
	}
}

int getMinimumFuelCapacity(int x, int y) {
	sort(edge.begin(), edge.end(), cmp);
	link.resize(n);
	volume.resize(n);
	swapable.resize(n);
	degree.resize(n);
	for (int i=0; i<n; i++) {
		link[i] = i;
		volume[i] = 1;
	}
	for (auto e: edge)
	{
		int u = get<0>(e);
		int v = get<1>(e);
		int w = get<2>(e);
		if (same(u, v)) {swapable[find(u)] = true;}
		unite(u, v);
		//cout<<u<<" "<<v<<" "<<"\n";
		//cout<<degree[u]<<" "<<degree[v]<<" "<<swapable[y]<<"\n\n";
		if (same(x, y) && swapable[find(x)]) {return w;}
	}
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -