제출 #1189294

#제출 시각아이디문제언어결과실행 시간메모리
1189294zh_h자매 도시 (APIO20_swap)C++17
7 / 100
52 ms6108 KiB
#include <bits/stdc++.h>
#define pb push_back
#define lint long long int
using namespace std;

pair<int, int> min1={1e9, -1}, min2={1e9, -1}, min3={1e9, -1};
vector<int> edge;

void init(int n, int m, vector<int> U, vector<int> V, vector<int> W) {
    edge.resize(n);
    for (int i = 0; i < m; i ++) {
        edge[V[i]] = W[i];
    }
    
    for (int i = 0; i < m; i ++) {
        if (W[i] <= min1.first) {
            min3 = min2;
            min2 = min1;
            min1 = {W[i], V[i]};
        }
        else if (W[i] <= min2.first) {
            min3 = min2;
            min2 = {W[i], V[i]};
        }
        else if (W[i] <= min3.first) {
            min3 = {W[i], V[i]};
        }
    }
}

int getMinimumFuelCapacity(int x, int y) {
    if (edge.size() <= 3) {
        return -1;
    }
    else if (x == 0 || y == 0) {
        if (x > y) {swap(x, y);}
        int road1, road2;
        if (y == min1.second) {
            road1 = min2.first; road2 = min3.first;
        }
        else if (y == min2.second) {
            road1 = min1.first; road2 = min3.first;
        }
        else {
            road1 = min1.first, road2 = min2.first;
        }
        return max({road1, road2, edge[y]});
    }
    else {
        if (x != min1.second && y != min1.second) {
            return max({min1.first, edge[x], edge[y]});
        }
        else if (x != min2.second && y != min2.second) {
            return max({min2.first, edge[x], edge[y]});
        }
        else {
            return max({min3.first, edge[x], edge[y]});
        }
    }
}
#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...