제출 #1190495

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

vector<vector<pair<int, int>>> edge;
vector<vector<int>> cost;
int N;

void init (int n, int m, vector<int> u, vector<int> v, vector<int> w) {
    edge.resize(n+1);
    for (int i = 0; i < m; i ++) {
        edge[u[i]].pb({v[i], w[i]});
        edge[v[i]].pb({u[i], w[i]});
    }

    N = n;
}

int getMinimumFuelCapacity (int x, int y) {
    cost.clear();
    cost.resize(N+1, vector<int>(N+1, 1e9+1));

    priority_queue<pair<int, pair<int, int>>> q;
    vector<vector<int>> visited(N+1, vector<int>(N+1, false));
    // cost[x][y] = 0; visited[x][y] = true;

    q.push({0, {x, y}});

    while (!q.empty()) {
        int w = -q.top().first;
        int a = q.top().second.first, b = q.top().second.second;
        q.pop();

        if (visited[a][b]) continue;
        visited[a][b] = true;
        cost[a][b] = w;

        for (auto i : edge[a]) {
            if (i.first == b) continue;
            if (visited[i.first][b]) continue;

            int new_w = max(w, i.second);
            q.push({-new_w, {i.first, b}});
        }

        for (auto i : edge[b]) {
            if (i.first == a) continue;
            if (visited[a][i.first]) continue;

            int new_w = max(w, i.second);
            q.push({-new_w, {a, i.first}});
        }
    }
    
    if (cost[y][x] == 1e9+1) cost[y][x] = -1;
    return cost[y][x];;
}
#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...