3112. 访问消失节点的最少时间
题目链接:3112. 访问消失节点的最少时间
代码如下:
class Solution
{
public:
vector<int> minimumTime(int n, vector<vector<int>>& edges, vector<int>& disappear)
{
vector<vector<pair<int,int>>> graph(n);
for(auto& e:edges)
{
int x=e[0],y=e[1],weight=e[2];
graph[x].emplace_back(y,weight);
graph[y].emplace_back(x,weight);
}
vector<int> distance(n,-1);
distance[0]=0;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<>> pq;
pq.emplace(0,0);
while(!pq.empty())
{
auto [dx,x]=pq.top();
pq.pop();
if(dx>distance[x]) {continue;} //x之前出堆过
for(auto& [y,d]:graph[x])
{
int new_dis=dx+d;
if(new_dis<disappear[y]&&(distance[y]<0||new_dis<distance[y]))
{
distance[y]=new_dis;//更新x的邻居的最短路
pq.emplace(new_dis,y);
}
}
}
return distance;
}
};