제출 #1165561

#제출 시각아이디문제언어결과실행 시간메모리
1165561ezzatw122Pictionary (COCI18_pictionary)C++20
140 / 140
127 ms6952 KiB
#include <bits/stdc++.h>


// you just try again
using namespace std;
#define ll long long

void read() {
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
}

const int N = 1e5 + 5;

class DSU {
public:
    vector<int> parent, sz;

    DSU(int n) {
        parent = sz = vector<int>(n);
        for (int i = 0; i < n; ++i) {
            parent[i] = i, sz[i] = 1;
        }
    }

    int find(int n) {
        if (parent[n] == n)return n;
        return parent[n] = find(parent[n]);
    }

    void uni(int x, int y) {
        x = find(x), y = find(y);
        if (x == y)return;
        if (sz[y] > sz[x])swap(x, y);
        parent[y] = x, sz[x] += sz[y];
    }

    bool issame(int x, int y) {
        return find(x) == find(y);
    }
};

int n, m, q, ql[N], qr[N], u[N], v[N], ans[N];

void code() {
    cin >> n >> m >> q;
    for (int i = 0; i < q; ++i) {
        cin >> u[i] >> v[i];
        ql[i] = 1, qr[i] = m;
    }
    bool lassa = 1;
    while (lassa) {
        lassa = 0;
        vector<vector<int>> mids(m + 1);
        DSU dsu(n + 1);
        for (int i = 0; i < q; ++i) {
            if (ql[i] <= qr[i]) {
                lassa = 1;
                mids[(ql[i] + qr[i]) >> 1].push_back(i);
            }
        }
        for (int mid = 1; mid <= m; ++mid) {
            int val = m - mid + 1;
            for (int i = val + val; i <= n; i += val)
                if (i <= n)dsu.uni(val, i);
            for (auto i: mids[mid]) {
                if (dsu.issame(u[i], v[i])) {
                    ans[i] = mid, qr[i] = mid - 1;
                } else {
                    ql[i] = mid + 1;
                }
            }
        }
    }
    for (int i = 0; i < q; ++i) {
        cout << ans[i] << '\n';
    }
}


int main() {
    read();
    int t = 1;
    //  cin >> t;
    while (t--)
        code();
}
#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...