Submission #256917

# Submission time Handle Problem Language Result Execution time Memory
256917 2020-08-03T11:55:45 Z Pankin Pictionary (COCI18_pictionary) C++14
126 / 140
1500 ms 10488 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

/*
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("-O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
*/

#define mp make_pair
#define ll long long
#define ld long double
#define pb push_back
#define fast_io ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define fs first
#define sc second
#define getfiles ifstream cin("input.txt"); ofstream cout("output.txt");
#define endl '\n'
#define pii pair<int, int>

const int INF = 2000000005;
const ll BIG_INF = 2000000000000000005;
const int mod = 1000000007;
const int P = 31;
const ld PI = 3.141592653589793238462643;
const double eps = 1e-9;

using namespace std;
using namespace __gnu_pbds;

bool valid(int x, int y, int n, int m) {
    return x >= 0 && y >= 0 && x < n && y < m;
}

mt19937 rng(1999999973);

typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

const int N = 100000 + 50;

vector<int> del[N];
int n, m, q, ans[N], p[N], sz[N], x[N], y[N];

vector<int> req[N];

int find_set(int v) {
    if (p[v] == v)
        return v;
    p[v] = find_set(p[v]);
    return p[v];
}

inline void add_edge(int u, int v, int day) {
    u = find_set(u), v = find_set(v);
    if (u == v)
        return;

    if (sz[u] > sz[v])
        swap(u, v);
    p[u] = v;
    sz[v] += sz[u];
    for (int i = 0; i < req[v].size(); i++) {
        if (find_set(x[req[v][i]]) == find_set(y[req[v][i]])) {
            ans[req[v][i]] = day;
            swap(req[v][i], req[v].back());
            req[v].pop_back();
            i--;
        }
    }
    for (int i = 0; i < req[u].size(); i++) {
        if (find_set(x[req[u][i]]) == find_set(y[req[u][i]])) {
            ans[req[u][i]] = day;
            swap(req[u][i], req[u].back());
            req[u].pop_back();
            i--;
        }
    }
    for (int i = 0; i < req[u].size(); i++) {
        req[v].pb(req[u][i]);
    }
    req[u].clear();
}

signed main() {
    fast_io;


    cin >> n >> m >> q;

    for (int i = 1; i <= n; i++) {
        p[i] = i;
        sz[i] = 1;
    }

    for (int i = 0; i < q; i++) {
        cin >> x[i] >> y[i];
        req[x[i]].pb(i);
    }
    for (int i = m; i >= 1; i--) {
        for (int j = i + i; j <= n; j += i) {
            add_edge(i, j, m - i + 1);
        }
    }
    for (int i = 0; i < q; i++)
        cout << ans[i] << endl;

    return 0;
}

Compilation message

pictionary.cpp: In function 'void add_edge(int, int, int)':
pictionary.cpp:64:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < req[v].size(); i++) {
                     ~~^~~~~~~~~~~~~~~
pictionary.cpp:72:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < req[u].size(); i++) {
                     ~~^~~~~~~~~~~~~~~
pictionary.cpp:80:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < req[u].size(); i++) {
                     ~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 7 ms 5376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 17 ms 5760 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 79 ms 7664 KB Output is correct
2 Correct 122 ms 7160 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 143 ms 8448 KB Output is correct
2 Correct 125 ms 7928 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 183 ms 7160 KB Output is correct
2 Correct 188 ms 7160 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 244 ms 7416 KB Output is correct
2 Correct 1051 ms 7288 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 498 ms 8312 KB Output is correct
2 Correct 300 ms 7672 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 1588 ms 8192 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1002 ms 9720 KB Output is correct
2 Correct 1187 ms 9760 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1371 ms 10488 KB Output is correct
2 Correct 1423 ms 10232 KB Output is correct