class Solution {
public:
vector<int> minimumTime(int n, vector<vector<int>>& edges, vector<int>& disappear) {
vector <vector <pair <int, int>>> adj(n);
for (auto &edge: edges){
auto u = edge[0], v = edge[1], w = edge[2];
adj[u].emplace_back(v, w);
adj[v].emplace_back(u, w);
}
const int inf = 1e9 + 7;
vector <int> dist = disappear;
priority_queue <pair <int, int>, vector <pair <int, int>>, greater <pair <int, int>>> pq;
auto transition = [&](int d, int u){
if (dist[u] > d){
dist[u] = d;
pq.emplace(d, u);
}
};
transition(0, 0);
while (not pq.empty()){
auto [d, u] = pq.top(); pq.pop();
if (dist[u] != d){
continue;
}
for (auto &[v, w]: adj[u]){
transition(d + w, v);
}
}
for (auto u = 0; u < n; u++){
if (dist[u] == disappear[u]){
dist[u] = -1;
}
}
return dist;
}
};