Submission #2092920


Source Code Expand

#include <iostream>
#include <algorithm>
#include <array>
#include <cstdint>
#include <climits>
#include <functional>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stack>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <utility>
#include <vector>

using int32 = std::int_fast32_t;
using int64 = std::int_fast64_t;
using uint32 = std::uint_fast32_t;
using uint64 = std::uint_fast64_t;

class partially_persistent_disjoint_set {
	std::vector<std::pair<std::uint_fast32_t, std::uint_fast32_t>> tree;
	std::uint_fast32_t count;
public:
	partially_persistent_disjoint_set(const std::uint_fast32_t size) :tree(size, { 1,std::numeric_limits<std::uint_fast32_t>::max() }), count(0) {}
	std::uint_fast32_t find(std::uint_fast32_t ver, std::uint_fast32_t x) {
		while (tree[x].second <= ver) {
			x = tree[x].first;
		}
		return x;
	}
	std::uint_fast32_t unite(std::uint_fast32_t x, std::uint_fast32_t y) {
		++count;
		x = find(count, x);
		y = find(count, y);
		if (x == y) return count;
		if (tree[x].first < tree[y].first) std::swap(x, y);
		tree[x].first += tree[y].first;
		tree[y] = { x,count };
		return count;
	}
	bool same(std::uint_fast32_t ver, std::uint_fast32_t x, std::uint_fast32_t y) {
		return find(ver, x) == find(ver, y);
	}
};

int main(void) {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	uint32 n, m;
	std::cin >> n >> m;
	partially_persistent_disjoint_set S(n);
	uint32 a, b;
	for (uint32 i = 0;i < m;++i) {
		std::cin >> a >> b;
		--a;--b;
		S.unite(a, b);
	}
	uint32 q;
	std::cin >> q;
	uint32 x, y;
	do {
		std::cin >> x >> y;
		--x;--y;
		uint32 ng = 0, ok = m + 1;
		while (ok - ng > 1) {
			uint32 mid = (ng + ok) / 2;
			if (S.same(mid, x, y)) {
				ok = mid;
			}
			else {
				ng = mid;
			}
		}
		if (ng == m) std::cout << "-1\n";
		else std::cout << ok << "\n";
	} while (--q);
	return 0;
}

Submission Info

Submission Time
Task H - Union Sets
User noshi91
Language C++14 (GCC 5.4.1)
Score 600
Code Size 1950 Byte
Status AC
Exec Time 88 ms
Memory 2432 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 49
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_2.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_3.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_4.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_1_43.txt, subtask_1_44.txt, subtask_1_45.txt, subtask_1_46.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
subtask_1_1.txt AC 1 ms 256 KB
subtask_1_10.txt AC 9 ms 256 KB
subtask_1_11.txt AC 37 ms 640 KB
subtask_1_12.txt AC 2 ms 1024 KB
subtask_1_13.txt AC 2 ms 256 KB
subtask_1_14.txt AC 1 ms 256 KB
subtask_1_15.txt AC 10 ms 384 KB
subtask_1_16.txt AC 2 ms 256 KB
subtask_1_17.txt AC 3 ms 256 KB
subtask_1_18.txt AC 1 ms 256 KB
subtask_1_19.txt AC 3 ms 896 KB
subtask_1_2.txt AC 1 ms 256 KB
subtask_1_20.txt AC 1 ms 256 KB
subtask_1_21.txt AC 2 ms 256 KB
subtask_1_22.txt AC 2 ms 640 KB
subtask_1_23.txt AC 21 ms 2176 KB
subtask_1_24.txt AC 22 ms 2176 KB
subtask_1_25.txt AC 23 ms 2176 KB
subtask_1_26.txt AC 27 ms 2176 KB
subtask_1_27.txt AC 73 ms 2432 KB
subtask_1_28.txt AC 74 ms 2432 KB
subtask_1_29.txt AC 21 ms 2176 KB
subtask_1_3.txt AC 1 ms 256 KB
subtask_1_30.txt AC 22 ms 2176 KB
subtask_1_31.txt AC 23 ms 2176 KB
subtask_1_32.txt AC 27 ms 2176 KB
subtask_1_33.txt AC 77 ms 2432 KB
subtask_1_34.txt AC 77 ms 2432 KB
subtask_1_35.txt AC 21 ms 2176 KB
subtask_1_36.txt AC 22 ms 2176 KB
subtask_1_37.txt AC 23 ms 2176 KB
subtask_1_38.txt AC 26 ms 2176 KB
subtask_1_39.txt AC 53 ms 2432 KB
subtask_1_4.txt AC 3 ms 1408 KB
subtask_1_40.txt AC 53 ms 2432 KB
subtask_1_41.txt AC 19 ms 512 KB
subtask_1_42.txt AC 24 ms 512 KB
subtask_1_43.txt AC 79 ms 1920 KB
subtask_1_44.txt AC 88 ms 2432 KB
subtask_1_45.txt AC 14 ms 512 KB
subtask_1_46.txt AC 19 ms 2176 KB
subtask_1_5.txt AC 8 ms 256 KB
subtask_1_6.txt AC 2 ms 1024 KB
subtask_1_7.txt AC 1 ms 384 KB
subtask_1_8.txt AC 1 ms 512 KB
subtask_1_9.txt AC 4 ms 512 KB