답안 #712387

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
712387 2023-03-18T17:58:10 Z Ronin13 자매 도시 (APIO20_swap) C++14
23 / 100
2000 ms 94528 KB
#include "swap.h"
#include <bits/stdc++.h>
#define ll long long
#define f first
#define s second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define epb emplace_back
#define ull unsigned ll
#include <vector>

/*
5 6
0 1 4
0 2 4
1 2 1
1 3 2
1 4 10
2 3 3
3
1 2
2 4
0 1

*/
using namespace std;


const int nmax = 1000000;

vector <vector <pii> > g(nmax);

vector <vector <int> > cmp(nmax);

vector <pii> par[nmax];



int val[nmax];
int l[nmax], r[nmax];
void make_set(int v){
    par[v].pb({v, 0});
    cmp[v].pb(v);
    val[v] = 1e9 + 1;
    l[v] = r[v] = v;
}

void union_sets(int a, int b, int len){
    if(par[a].back().f == par[b].back().f){
        if(val[a] == 1e9 +1){
            int x = par[a].back().f;
            for(int to : cmp[x]){
                val[to] = len;
            }
        }
        return;
    }
    int x = par[a].back().f, y = par[b].back().f;
    if(cmp[x].size() < cmp[y].size())
        swap(x, y), swap(a, b);
    for(int to : cmp[y])
        cmp[x].pb(to), par[to].pb({x, len});
    if(val[x] == 1e9 + 1 || val[y] == 1e9 + 1){
        int mn = min(val[x], val[y]);
        if(mn != 1e9 + 1){
        for(int to : cmp[x])
            val[to] = min(val[to], len);
        return;}
    }

    if(l[x] == a && l[y] == b){
        l[x] = r[y];
        return;
    }
    if(l[x] == a && r[y] == b){
        l[x] = l[y];
        return;
    }
    if(r[x] == a && l[y] == b){
        r[x] = r[y];
        return;
    }
    if(r[x] == a && r[y] == b){
        r[x] = l[y];
        return;
    }
    for(int to : cmp[x])
        val[to] =    min(val[to], len);
}

void init(int N, int M,
          std::vector<int> U, std::vector<int> V, std::vector<int> W) {
    int n = N;
    vector <pair <int, pii> > ed;
    for(int i = 0; i < n; i++)
        make_set(i);
    for(int i = 0; i < M; i++){
        ed.pb({W[i], {U[i], V[i]}});
    }
    sort(ed.begin(), ed.end());
    for(int i = 0; i < ed.size(); i++){
        union_sets(ed[i].s.f, ed[i].s.s, ed[i].f);
        //cout << 1;
    }
}

int getMinimumFuelCapacity(int X, int Y) {
    if(val[X] == 1e9 + 1)
        return -1;
    int x = X, y = Y;
    int sz = par[x].size() - 1;
    int sz2 = par[y].size() - 1;
    int ans = 1e9 + 1;
    while(sz >= 0 && sz2 >= 0){

        if(par[x][sz].f== par[y][sz2].f)
            ans = min(ans, max(par[x][sz].s, par[y][sz2].s));
        sz--;
        sz2--;
    }
  int u = max(min(val[X],val[y]), ans);
  if(u == 1e9 + 1)
    u = -1;
  return u;
}

Compilation message

swap.cpp: In function 'void init(int, int, std::vector<int>, std::vector<int>, std::vector<int>)':
swap.cpp:102:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  102 |     for(int i = 0; i < ed.size(); i++){
      |                    ~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 70732 KB Output is correct
2 Correct 39 ms 70788 KB Output is correct
3 Correct 33 ms 70740 KB Output is correct
4 Correct 35 ms 70732 KB Output is correct
5 Correct 35 ms 70864 KB Output is correct
6 Correct 38 ms 70932 KB Output is correct
7 Correct 34 ms 70840 KB Output is correct
8 Correct 34 ms 70884 KB Output is correct
9 Correct 159 ms 87752 KB Output is correct
10 Correct 194 ms 91332 KB Output is correct
11 Correct 164 ms 90948 KB Output is correct
12 Correct 209 ms 92140 KB Output is correct
13 Correct 132 ms 84576 KB Output is correct
14 Correct 146 ms 87848 KB Output is correct
15 Correct 252 ms 93300 KB Output is correct
16 Correct 232 ms 92592 KB Output is correct
17 Correct 225 ms 93968 KB Output is correct
18 Correct 177 ms 86280 KB Output is correct
19 Correct 94 ms 77192 KB Output is correct
20 Correct 252 ms 93548 KB Output is correct
21 Correct 233 ms 93008 KB Output is correct
22 Correct 285 ms 94416 KB Output is correct
23 Correct 225 ms 86676 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 70732 KB Output is correct
2 Correct 39 ms 70788 KB Output is correct
3 Execution timed out 2073 ms 83208 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 70732 KB Output is correct
2 Correct 39 ms 70788 KB Output is correct
3 Correct 33 ms 70740 KB Output is correct
4 Correct 35 ms 70732 KB Output is correct
5 Correct 35 ms 70864 KB Output is correct
6 Correct 38 ms 70932 KB Output is correct
7 Correct 34 ms 70840 KB Output is correct
8 Correct 34 ms 70884 KB Output is correct
9 Correct 37 ms 70732 KB Output is correct
10 Correct 37 ms 70884 KB Output is correct
11 Correct 35 ms 70852 KB Output is correct
12 Correct 35 ms 70856 KB Output is correct
13 Correct 39 ms 70856 KB Output is correct
14 Correct 33 ms 70916 KB Output is correct
15 Correct 34 ms 70860 KB Output is correct
16 Correct 35 ms 70896 KB Output is correct
17 Correct 35 ms 70912 KB Output is correct
18 Correct 34 ms 70932 KB Output is correct
19 Correct 41 ms 70908 KB Output is correct
20 Correct 35 ms 70928 KB Output is correct
21 Correct 34 ms 70928 KB Output is correct
22 Correct 40 ms 70816 KB Output is correct
23 Correct 35 ms 70896 KB Output is correct
24 Correct 44 ms 70988 KB Output is correct
25 Correct 39 ms 70960 KB Output is correct
26 Correct 35 ms 70976 KB Output is correct
27 Correct 38 ms 70844 KB Output is correct
28 Correct 37 ms 70896 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 70732 KB Output is correct
2 Correct 33 ms 70732 KB Output is correct
3 Correct 39 ms 70788 KB Output is correct
4 Correct 33 ms 70740 KB Output is correct
5 Correct 35 ms 70732 KB Output is correct
6 Correct 35 ms 70864 KB Output is correct
7 Correct 38 ms 70932 KB Output is correct
8 Correct 34 ms 70840 KB Output is correct
9 Correct 34 ms 70884 KB Output is correct
10 Correct 159 ms 87752 KB Output is correct
11 Correct 194 ms 91332 KB Output is correct
12 Correct 164 ms 90948 KB Output is correct
13 Correct 209 ms 92140 KB Output is correct
14 Correct 132 ms 84576 KB Output is correct
15 Correct 37 ms 70884 KB Output is correct
16 Correct 35 ms 70852 KB Output is correct
17 Correct 35 ms 70856 KB Output is correct
18 Correct 39 ms 70856 KB Output is correct
19 Correct 33 ms 70916 KB Output is correct
20 Correct 34 ms 70860 KB Output is correct
21 Correct 35 ms 70896 KB Output is correct
22 Correct 35 ms 70912 KB Output is correct
23 Correct 34 ms 70932 KB Output is correct
24 Correct 41 ms 70908 KB Output is correct
25 Correct 35 ms 70928 KB Output is correct
26 Correct 34 ms 70928 KB Output is correct
27 Correct 40 ms 70816 KB Output is correct
28 Correct 35 ms 70896 KB Output is correct
29 Correct 44 ms 70988 KB Output is correct
30 Correct 39 ms 70960 KB Output is correct
31 Correct 35 ms 70976 KB Output is correct
32 Correct 38 ms 70844 KB Output is correct
33 Correct 37 ms 70896 KB Output is correct
34 Correct 54 ms 73484 KB Output is correct
35 Correct 196 ms 93900 KB Output is correct
36 Correct 222 ms 93664 KB Output is correct
37 Correct 206 ms 93224 KB Output is correct
38 Correct 197 ms 92272 KB Output is correct
39 Correct 238 ms 91880 KB Output is correct
40 Correct 229 ms 89876 KB Output is correct
41 Correct 191 ms 94528 KB Output is correct
42 Correct 203 ms 94320 KB Output is correct
43 Execution timed out 2067 ms 84036 KB Time limit exceeded
44 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 70732 KB Output is correct
2 Correct 39 ms 70788 KB Output is correct
3 Correct 33 ms 70740 KB Output is correct
4 Correct 35 ms 70732 KB Output is correct
5 Correct 35 ms 70864 KB Output is correct
6 Correct 38 ms 70932 KB Output is correct
7 Correct 34 ms 70840 KB Output is correct
8 Correct 34 ms 70884 KB Output is correct
9 Correct 159 ms 87752 KB Output is correct
10 Correct 194 ms 91332 KB Output is correct
11 Correct 164 ms 90948 KB Output is correct
12 Correct 209 ms 92140 KB Output is correct
13 Correct 132 ms 84576 KB Output is correct
14 Correct 146 ms 87848 KB Output is correct
15 Correct 252 ms 93300 KB Output is correct
16 Correct 232 ms 92592 KB Output is correct
17 Correct 225 ms 93968 KB Output is correct
18 Correct 177 ms 86280 KB Output is correct
19 Execution timed out 2073 ms 83208 KB Time limit exceeded
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 70732 KB Output is correct
2 Correct 33 ms 70732 KB Output is correct
3 Correct 39 ms 70788 KB Output is correct
4 Correct 33 ms 70740 KB Output is correct
5 Correct 35 ms 70732 KB Output is correct
6 Correct 35 ms 70864 KB Output is correct
7 Correct 38 ms 70932 KB Output is correct
8 Correct 34 ms 70840 KB Output is correct
9 Correct 34 ms 70884 KB Output is correct
10 Correct 159 ms 87752 KB Output is correct
11 Correct 194 ms 91332 KB Output is correct
12 Correct 164 ms 90948 KB Output is correct
13 Correct 209 ms 92140 KB Output is correct
14 Correct 132 ms 84576 KB Output is correct
15 Correct 146 ms 87848 KB Output is correct
16 Correct 252 ms 93300 KB Output is correct
17 Correct 232 ms 92592 KB Output is correct
18 Correct 225 ms 93968 KB Output is correct
19 Correct 177 ms 86280 KB Output is correct
20 Execution timed out 2073 ms 83208 KB Time limit exceeded
21 Halted 0 ms 0 KB -