Submission #300057

#TimeUsernameProblemLanguageResultExecution timeMemory
300057shrek12357Pictionary (COCI18_pictionary)C++14
14 / 140
126 ms4672 KiB
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <map> #include <set> #include <climits> #include <cmath> #include <fstream> #include <queue> using namespace std; const int MAXN = 10005; int sz[MAXN], par[MAXN]; int get(int x) { return x == par[x] ? x : par[x] = get(par[x]); } void unite(int a, int b) { a = get(a), b = get(b); if (a == b) { return; } if (sz[a] > sz[b]) { swap(a, b); } par[a] = b; sz[b] += sz[a]; } int main() { int n, m, q; cin >> n >> m >> q; vector<pair<pair<int, int>, int>> queries; int ans[MAXN]; for (int i = 0; i < MAXN; i++) { sz[i] = 1; par[i] = i; ans[i] = -1; } for (int i = 0; i < q; i++) { int a, b; cin >> a >> b; queries.push_back({ { a, b }, i }); } for (int i = 0; i < m; i++) { for (int j = m - i; j <= n; j += (m - i)) { unite(m-i, j); for (auto k : queries) { if (ans[k.second] == -1) { if (get(k.first.first) == get(k.first.second)) { ans[k.second] = i + 1; } } } } } for (int i = 0; i < q; i++) { cout << ans[i] << endl; } }
#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...