1 class Solution {
2 public:
3 typedef pair<int,int> pii;
4 struct cmp{
5 bool operator ()(pii &a,pii &b)
6 {
7 return a.second>b.second;
8 }
9 };
10
11 int secondMinimum(int n, vector<vector<int>>& edges, int time, int change) {
12 vector<int>G[n+1];
13 for(auto &p:edges)
14 {
15 G[p[0]].push_back(p[1]);
16 G[p[1]].push_back(p[0]);
17 }
18 vector<int>dis1(n+1,INT_MAX),dis2(n+1,INT_MAX);
19 priority_queue<pii,vector<pii>,cmp>q;
20 q.push({1,0});
21 dis1[1]=0;
22 int cnt=0,first=INT_MAX;
23 while(q.size())
24 {
25 auto [u,d]=q.top();
26 q.pop();
27 for(int i=0;i<G[u].size();i++)
28 {
29 int v=G[u][i];
30 int w= (d%(2*change)<change)?d+time:d-(d%(change))+change+time;
31 if(w<dis1[v])
32 {
33 dis2[v]=dis1[v];
34 dis1[v]=w;
35 q.push({v,w});
36 }
37 else if(w>dis1[v]&&w<dis2[v])
38 {
39 dis2[v]=w;
40 q.push({v,w});
41 }
42 }
43 }
44 return dis2[n];
45 }
46 };