Submission #635665

#TimeUsernameProblemLanguageResultExecution timeMemory
635665KhoaPictionary (COCI18_pictionary)C++14
140 / 140
44 ms3308 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define S second #define pb push_back #define all(a) a.begin(), a.end() typedef long long ll; typedef pair<int, int> ii; void print() {cerr << '\n';} template <typename T, typename... Args> void print(const T &a, const Args &...args) { cerr << a << ' ', print(args...); } const int N = 2e5 + 5; int n, m, q, par[N], w[N], sz[N]; int anc(int u) { return u == par[u] ? u : anc(par[u]); } void join(int u, int v, int weight) { u = anc(u), v = anc(v); if (u == v) return; if(sz[u] > sz[v]) swap(u, v); par[u] = v; sz[v] += sz[u]; w[u] = weight; } int Getmax(int u, int v) { int ans = 0; while (u != v) { if (w[u] > w[v]) swap(u, v); ans = w[u]; u = par[u]; } return ans; } signed main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> m >> q; for(int i = 1; i <= n; i++) sz[i] = 1, par[i] = i, w[i] = 1e9; for(int i = m; i >= 1; i--) { for(int j = i; j <= n; j += i) join(i, j, m - i + 1); } while(q--) { int u, v; cin >> u >> v; cout << Getmax(u, v) << '\n'; } return 0; } /* nhận xét tất cả các đỉnh có gcd bằng M nối với nhau đồng nghĩa với việc tất cả các đỉnh chia hết cho M đểu thuộc cùng một thành phần liên thông */
#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...