제출 #1321167

#제출 시각아이디문제언어결과실행 시간메모리
1321167tryharderforioi100Pictionary (COCI18_pictionary)C++20
140 / 140
156 ms26056 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll p[100005], siz[100005], ranking[100005]; void reset(ll n) { ll i; for(i = 1; i <= n; i++) { p[i] = i; siz[i] = 1; ranking[i] = 0; } } ll parent(ll v) { if(p[v] == v) { return v; } return p[v] = parent(p[v]); } void merge(ll u, ll v) { ll x = parent(u); ll y = parent(v); if(x == y) { return; } if(ranking[x] > ranking[y]) { p[y] = x; siz[x] += siz[y]; } else { p[x] = y; siz[y] += siz[x]; if(ranking[x] == ranking[y]) { ranking[y]++; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ll t = 1; //cin >> t; while(t--) { ll n, m, q; cin >> n >> m >> q; ll a[q + 1], b[q + 1], l[q + 1], r[q + 1], i; for(i = 1; i <= q; i++) { cin >> a[i] >> b[i]; l[i] = 1; r[i] = m; } reset(n); vector<ll>cand[m + 1]; while(true) { //cout << "?" << endl; bool ischange = false; for(i = 1; i <= q; i++) { if(l[i] != r[i]) { ischange = true; //cout << i << " " << l[i] << " " << r[i] << endl; ll mid = (l[i] + r[i]) / 2; cand[mid].push_back(i); } } if(ischange == false) { break; } for(i = 1; i <= m; i++) { ll j; ll rielval = m - i + 1; //cout << rielval << endl; for(j = rielval * 2; j <= n; j += rielval) { merge(rielval, j); } if(cand[i].size() == 0) { continue; } while(cand[i].size() != 0) { ll idx = cand[i].back(); //cout << i << " " << idx << endl; cand[i].pop_back(); ll x = parent(a[idx]), y = parent(b[idx]); if(x == y) { r[idx] = i; } else { l[idx] = i + 1; } } } reset(n); } for(i = 1; i <= q; i++) { cout << r[i] << endl; } cout << endl; } #ifndef ONLINE_JUDGE cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"; #endif return 0; } // Author: tryharderforioi100
#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...