Submission #980849

# Submission time Handle Problem Language Result Execution time Memory
980849 2024-05-12T13:49:50 Z Marcus Swapping Cities (APIO20_swap) C++17
0 / 100
2000 ms 5932 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) {
	degree[a]++; degree[b]++;
	if (degree[a] >= 3) swapable[find(a)] = true;
	if (degree[b] >= 3) swapable[find(b)] = true;

    a = find(a); b = find(b);
    if (volume[a] < volume[b]) swap(a,b);
	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]});
	}
}
 
int getMinimumFuelCapacity(int x, int y) {
	sort(edge.begin(), edge.end(), cmp);
	link.resize(n, 0);
	volume.resize(n, 0);
	swapable.resize(n, 0);
	degree.resize(n, 0);
	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);
		bool cycle = same(u, v);
		unite(u, v);
		if (cycle) {swapable[find(u)] = true;}
		if (same(x, y) && swapable[find(x)]) {return w;}
	}
	return -1;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Execution timed out 2090 ms 5932 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -