Submission #854674

#TimeUsernameProblemLanguageResultExecution timeMemory
854674hariaakas646Pictionary (COCI18_pictionary)C++17
140 / 140
1037 ms10016 KiB
#include <bits/stdc++.h>

using namespace std;

#define scd(t) scanf("%d", &t)
#define sclld(t) scanf("%lld", &t)
#define forr(i, j, k) for (int i = j; i < k; i++)
#define frange(i, j) forr(i, 0, j)
#define all(cont) cont.begin(), cont.end()
#define mp make_pair
#define pb push_back
#define f first
#define s second
typedef long long int lli;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<bool> vb;
typedef vector<lli> vll;
typedef vector<string> vs;
typedef vector<pii> vii;
typedef vector<vi> vvi;
typedef map<int, int> mpii;
typedef set<int> seti;
typedef multiset<int> mseti;
typedef long double ld;

void usaco()
{
    freopen("/media/hariaakash646/785EF1075EF0BF46/CompetitiveProgramming/input.in", "r", stdin);
//    freopen("problem.out", "w", stdout);
}

vi disset;
vector<vii> graph;

int findf(int x) {
    while(x != disset[x]) x = disset[x];
    return x;
}

void unionf(int x, int y) {
    int x2 = findf(x);
    int y2 = findf(y);
    disset[x2] = y2;
}

vii par;
vi depth;

void dfs(int x, int p, int d, int v) {
    par[x] = mp(p, v);
    depth[x] = d;
    for(auto e : graph[x]) {
        if(e.f != p) dfs(e.f, x, d+1, e.s);
    }
}

int main() {
    // usaco();
    int n, m, q;
    scd(n);
    scd(m);
    scd(q);

    graph = vector<vii>(n+1);
    disset = vi(n+1);

    frange(i, n+1) disset[i] = i;
    
    frange(i, m) {
        int v = m - i;
        for(int j=2*v; j<=n; j+=v) {
            if(findf(j) != findf(v)) {
                unionf(j, v);
                graph[j].pb(mp(v, i+1));
                graph[v].pb(mp(j, i+1));
            }
        }
    }

    depth = vi(n+1);
    par = vii(n+1);
    dfs(1, 0, 0, 0);
    frange(i, q) {
        int a, b;
        scd(a);
        scd(b);
        int ma = 0;
        if(depth[a] > depth[b]) swap(a, b);
        while(depth[b] > depth[a]) {
            ma = max(ma, par[b].s);
            b = par[b].f;
        }
        while(a != b) {
            ma = max(ma, par[b].s);
            ma = max(ma, par[a].s);
            a = par[a].f;
            b = par[b].f;
        }
        printf("%d\n", ma);

    }
}

Compilation message (stderr)

pictionary.cpp: In function 'void usaco()':
pictionary.cpp:29:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   29 |     freopen("/media/hariaakash646/785EF1075EF0BF46/CompetitiveProgramming/input.in", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pictionary.cpp: In function 'int main()':
pictionary.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
pictionary.cpp:61:5: note: in expansion of macro 'scd'
   61 |     scd(n);
      |     ^~~
pictionary.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
pictionary.cpp:62:5: note: in expansion of macro 'scd'
   62 |     scd(m);
      |     ^~~
pictionary.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
pictionary.cpp:63:5: note: in expansion of macro 'scd'
   63 |     scd(q);
      |     ^~~
pictionary.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
pictionary.cpp:86:9: note: in expansion of macro 'scd'
   86 |         scd(a);
      |         ^~~
pictionary.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
pictionary.cpp:87:9: note: in expansion of macro 'scd'
   87 |         scd(b);
      |         ^~~
#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...