Submission #92603

#TimeUsernameProblemLanguageResultExecution timeMemory
92603sidiq_haPictionary (COCI18_pictionary)C++14
140 / 140
377 ms16628 KiB
#include<bits/stdc++.h>

using namespace std;
typedef long long LL;
const int nn = 1e5 + 5;
int p[nn], ranke[nn], L[nn], R[nn], ans[nn];
vector<int> query[nn];

struct pasangan {
	int c1;
	int c2;
};

pasangan arr[nn];

int findSet(int nod) {
	if (p[nod] == nod) return nod;
	else return p[nod] = findSet(p[nod]);
}

bool cek(int n1, int n2) {
	n1 = findSet(n1);
	n2 = findSet(n2);
	if (n1 == n2) return 1;
	else return 0;
}

void gabung(int n1, int n2) {
	n1 = findSet(n1);
	n2 = findSet(n2);
	if (ranke[n1] < ranke[n2]) {
		p[n1] = n2;
	} else {
		p[n2] = n1;
		if (ranke[n1] == ranke[n2]) ranke[n1]++;
	}
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int N, M, Q;
	cin >> N >> M >> Q;
	for (int i = 1; i <= Q; i++) {
		cin >> arr[i].c1 >> arr[i].c2;
		L[i] = 1, R[i] = M;
		ans[i] = -1;
	}
	bool iterasi = 1;
	while (iterasi) {
		iterasi = 0;
		for (int i = 1; i <= N; i++) {
			p[i] = i;
			ranke[i] = 0;
		}
		for (int i = 1; i <= M; i++) {
			query[i].clear();
		}
		for (int i = 1; i <= Q; i++) {
			/*cout << L[i] << ' ' << R[i] << "\n";*/
			if (L[i] <= R[i]) {
				iterasi = 1;
				query[(L[i] + R[i]) >> 1].push_back(i);
			}
		}
		/*cout << "\n";*/
		for (int i = 1; i <= M; i++) {
			int j = 2;
			while (j * (M - i + 1) <= N) {
				if (!cek(M - i + 1, j * (M - i + 1)))
					gabung(M - i + 1, j * (M - i + 1));	
				j++;
			}
			int l1 = query[i].size();
			for (j = 0; j < l1; j++) {
				int idx = query[i][j];
				if (cek(arr[idx].c1, arr[idx].c2)) {
					ans[idx] = i;
					R[idx] = i - 1;
				} else L[idx] = i + 1;
			}
		}
	}
	for (int i = 1; i <= Q; i++) {
		cout << ans[i] << "\n";
	}
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...