Submission #83308

#TimeUsernameProblemLanguageResultExecution timeMemory
83308thiago4532Pictionary (COCI18_pictionary)C++17
56 / 140
1573 ms10052 KiB
#include <bits/stdc++.h> #define div divisores using namespace std; const int maxn = 1e5 + 10; int pai[maxn], peso[maxn], ans[maxn]; int n, m, q; int gcd(int a, int b){ return b ? gcd(b, a%b) : a; } void reset(){ for(int i=1;i<=n;i++) pai[i] = i, peso[i] = 0; } int find(int u){ return (pai[u] == u ? u : pai[u] = find(pai[u])); } inline void join(int a, int b){ a = find(a); b = find(b); if(peso[a] == peso[b]) peso[b]++; else if(peso[a] > peso[b]) swap(a, b); pai[a] = b; } pair<int, int> qq[maxn]; bool marcado[maxn]; int main(){ ios::sync_with_stdio(false), cin.tie(0); cin >> n >> m >> q; for(int i=1;i<=q;i++){ int a, b; cin >> a >> b; qq[i] = pair<int, int>{a, b}; } reset(); for(int k=m;k>=1;k--){ for(int i=2;i*k<=n;i++){ if(find(k) != find(i*k)) join(k, i*k); } for(int l=1;l<=q;l++){ if(marcado[l]) continue; if(find(qq[l].first) == find(qq[l].second)) ans[l] = m - k + 1, marcado[l] = true; } } for(int i=1;i<=q;i++) cout << ans[i] << "\n"; return 0; }
#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...