답안 #571163

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
571163 2022-06-01T11:02:37 Z 2fat2code 자매 도시 (APIO20_swap) C++17
13 / 100
355 ms 43572 KB
#include "swap.h"
#include <bits/stdc++.h>
#define fr first
#define sc second
#define all(s) s.begin(), s.end()
using namespace std;

const int nmax = 300005;

int pardsu[nmax], last, lca[nmax][19], marked[nmax], grad[nmax], val[nmax], timp, in[nmax], out[nmax], apropiat[nmax];
vector<pair<int, pair<int,int>>>edges;
vector<int>nod[nmax];

int findpar(int x){
    if(x != pardsu[x]){
        pardsu[x] = findpar(pardsu[x]);
    }
    return pardsu[x];
}

void dfs(int s, int apr = 0, int par = 0){
    in[s] = ++timp;
    if(marked[s]) apr = s;
    apropiat[s] = apr;
    for(auto it : nod[s]){
        if(it != par){
            dfs(it, apr, s);
        }
    }
    out[s] = ++timp;
}

bool is_lca(int x, int y){
    if(in[x] < in[y] && out[x] > out[y]) return true;
    else return false;
}

void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) {
    last = N;
    for(int i=1;i<=N;i++) pardsu[i] = i;
    for(int i=0;i<M;i++){
        U[i]++; V[i]++;
        edges.push_back({W[i], {U[i], V[i]}});
    }
    sort(all(edges));
    for(auto it : edges){
        int x = findpar(it.sc.fr);
        int y = findpar(it.sc.sc);
        ++last;
        pardsu[y] = last;
        pardsu[x] = last;
        pardsu[last] = last;
        val[last] = it.fr;
        grad[it.sc.sc]++;
        grad[it.sc.fr]++;
        lca[x][0] = last;
        lca[y][0] = last;
        nod[last].push_back(x);
        if(x != y) nod[last].push_back(y);
        if(x == y){
            marked[last] = 1;
        }
        else{
            if(grad[it.sc.sc] >= 3 || grad[it.sc.fr] >= 3){
                marked[last] = 1;
            }
        }
    }
    for(int i=1;i<=18;i++){
        for(int j=1;j<=last;j++){
            lca[j][i] = lca[lca[j][i-1]][i-1];
        }
    }
    dfs(last);
}

int getMinimumFuelCapacity(int X, int Y) {
    X++;
    Y++;
    int curr = X;
    if(!is_lca(curr, Y)){
        for(int i=18;i>=0;i--){
            if(lca[curr][i] != 0 && !is_lca(lca[curr][i], Y)) curr = lca[curr][i];
        }
        curr = lca[curr][0];
    }
    if(!apropiat[curr]) return -1;
    else{
        return val[apropiat[curr]];
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 7380 KB Output is correct
2 Correct 4 ms 7380 KB Output is correct
3 Correct 4 ms 7380 KB Output is correct
4 Correct 4 ms 7488 KB Output is correct
5 Correct 6 ms 7616 KB Output is correct
6 Correct 6 ms 7620 KB Output is correct
7 Correct 5 ms 7636 KB Output is correct
8 Correct 6 ms 7580 KB Output is correct
9 Correct 108 ms 27496 KB Output is correct
10 Correct 119 ms 31940 KB Output is correct
11 Correct 116 ms 31620 KB Output is correct
12 Correct 127 ms 33148 KB Output is correct
13 Correct 113 ms 36188 KB Output is correct
14 Correct 95 ms 27596 KB Output is correct
15 Correct 201 ms 34020 KB Output is correct
16 Correct 198 ms 33280 KB Output is correct
17 Correct 191 ms 34808 KB Output is correct
18 Correct 289 ms 37968 KB Output is correct
19 Correct 89 ms 15132 KB Output is correct
20 Correct 204 ms 36356 KB Output is correct
21 Correct 201 ms 35588 KB Output is correct
22 Correct 201 ms 37272 KB Output is correct
23 Correct 280 ms 40552 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 7380 KB Output is correct
2 Correct 4 ms 7380 KB Output is correct
3 Correct 273 ms 40924 KB Output is correct
4 Correct 277 ms 43572 KB Output is correct
5 Correct 346 ms 42760 KB Output is correct
6 Correct 280 ms 43348 KB Output is correct
7 Correct 355 ms 43184 KB Output is correct
8 Correct 271 ms 41884 KB Output is correct
9 Correct 285 ms 42816 KB Output is correct
10 Correct 282 ms 41500 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 7380 KB Output is correct
2 Correct 4 ms 7380 KB Output is correct
3 Correct 4 ms 7380 KB Output is correct
4 Correct 4 ms 7488 KB Output is correct
5 Correct 6 ms 7616 KB Output is correct
6 Correct 6 ms 7620 KB Output is correct
7 Correct 5 ms 7636 KB Output is correct
8 Correct 6 ms 7580 KB Output is correct
9 Correct 4 ms 7380 KB Output is correct
10 Correct 5 ms 7620 KB Output is correct
11 Incorrect 5 ms 7636 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 7380 KB Output is correct
2 Correct 4 ms 7380 KB Output is correct
3 Correct 4 ms 7380 KB Output is correct
4 Correct 4 ms 7380 KB Output is correct
5 Correct 4 ms 7488 KB Output is correct
6 Correct 6 ms 7616 KB Output is correct
7 Correct 6 ms 7620 KB Output is correct
8 Correct 5 ms 7636 KB Output is correct
9 Correct 6 ms 7580 KB Output is correct
10 Correct 108 ms 27496 KB Output is correct
11 Correct 119 ms 31940 KB Output is correct
12 Correct 116 ms 31620 KB Output is correct
13 Correct 127 ms 33148 KB Output is correct
14 Correct 113 ms 36188 KB Output is correct
15 Correct 5 ms 7620 KB Output is correct
16 Incorrect 5 ms 7636 KB Output isn't correct
17 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 7380 KB Output is correct
2 Correct 4 ms 7380 KB Output is correct
3 Correct 4 ms 7380 KB Output is correct
4 Correct 4 ms 7488 KB Output is correct
5 Correct 6 ms 7616 KB Output is correct
6 Correct 6 ms 7620 KB Output is correct
7 Correct 5 ms 7636 KB Output is correct
8 Correct 6 ms 7580 KB Output is correct
9 Correct 108 ms 27496 KB Output is correct
10 Correct 119 ms 31940 KB Output is correct
11 Correct 116 ms 31620 KB Output is correct
12 Correct 127 ms 33148 KB Output is correct
13 Correct 113 ms 36188 KB Output is correct
14 Correct 95 ms 27596 KB Output is correct
15 Correct 201 ms 34020 KB Output is correct
16 Correct 198 ms 33280 KB Output is correct
17 Correct 191 ms 34808 KB Output is correct
18 Correct 289 ms 37968 KB Output is correct
19 Correct 273 ms 40924 KB Output is correct
20 Correct 277 ms 43572 KB Output is correct
21 Correct 346 ms 42760 KB Output is correct
22 Correct 280 ms 43348 KB Output is correct
23 Correct 355 ms 43184 KB Output is correct
24 Correct 271 ms 41884 KB Output is correct
25 Correct 285 ms 42816 KB Output is correct
26 Correct 282 ms 41500 KB Output is correct
27 Correct 5 ms 7620 KB Output is correct
28 Incorrect 5 ms 7636 KB Output isn't correct
29 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 7380 KB Output is correct
2 Correct 4 ms 7380 KB Output is correct
3 Correct 4 ms 7380 KB Output is correct
4 Correct 4 ms 7380 KB Output is correct
5 Correct 4 ms 7488 KB Output is correct
6 Correct 6 ms 7616 KB Output is correct
7 Correct 6 ms 7620 KB Output is correct
8 Correct 5 ms 7636 KB Output is correct
9 Correct 6 ms 7580 KB Output is correct
10 Correct 108 ms 27496 KB Output is correct
11 Correct 119 ms 31940 KB Output is correct
12 Correct 116 ms 31620 KB Output is correct
13 Correct 127 ms 33148 KB Output is correct
14 Correct 113 ms 36188 KB Output is correct
15 Correct 95 ms 27596 KB Output is correct
16 Correct 201 ms 34020 KB Output is correct
17 Correct 198 ms 33280 KB Output is correct
18 Correct 191 ms 34808 KB Output is correct
19 Correct 289 ms 37968 KB Output is correct
20 Correct 273 ms 40924 KB Output is correct
21 Correct 277 ms 43572 KB Output is correct
22 Correct 346 ms 42760 KB Output is correct
23 Correct 280 ms 43348 KB Output is correct
24 Correct 355 ms 43184 KB Output is correct
25 Correct 271 ms 41884 KB Output is correct
26 Correct 285 ms 42816 KB Output is correct
27 Correct 282 ms 41500 KB Output is correct
28 Correct 5 ms 7620 KB Output is correct
29 Incorrect 5 ms 7636 KB Output isn't correct
30 Halted 0 ms 0 KB -