@@ -78,13 +78,81 @@ The second minimum time path is 1 -> 2 -> 1 -> 2 with time = 11 minutes
78
78
### ** Python3**
79
79
80
80
``` python
81
-
81
+ class Solution :
82
+ def secondMinimum (self , n : int , edges : List[List[int ]], time : int , change : int ) -> int :
83
+ g = defaultdict(set )
84
+ for u, v in edges:
85
+ g[u].add(v)
86
+ g[v].add(u)
87
+ q = deque([(1 , 0 )])
88
+ dist = [[float (' inf' )] * 2 for _ in range (n + 1 )]
89
+ dist[1 ][1 ] = 0
90
+ while q:
91
+ u, d = q.popleft()
92
+ for v in g[u]:
93
+ if d + 1 < dist[v][0 ]:
94
+ dist[v][0 ] = d + 1
95
+ q.append((v, d + 1 ))
96
+ elif dist[v][0 ] < d + 1 < dist[v][1 ]:
97
+ dist[v][1 ] = d + 1
98
+ if v == n:
99
+ break
100
+ q.append((v, d + 1 ))
101
+ ans = 0
102
+ for i in range (dist[n][1 ]):
103
+ ans += time
104
+ if i < dist[n][1 ] - 1 and (ans // change) % 2 == 1 :
105
+ ans = (ans + change) // change * change
106
+ return ans
82
107
```
83
108
84
109
### ** Java**
85
110
86
111
``` java
87
-
112
+ class Solution {
113
+ public int secondMinimum (int n , int [][] edges , int time , int change ) {
114
+ List<Integer > [] g = new List [n + 1 ];
115
+ for (int i = 0 ; i < n + 1 ; ++ i) {
116
+ g[i] = new ArrayList<> ();
117
+ }
118
+ for (int [] e : edges) {
119
+ int u = e[0 ], v = e[1 ];
120
+ g[u]. add(v);
121
+ g[v]. add(u);
122
+ }
123
+ Deque<int[]> q = new LinkedList<> ();
124
+ q. offerLast(new int []{1 , 0 });
125
+ int [][] dist = new int [n + 1 ][2 ];
126
+ for (int i = 0 ; i < n + 1 ; ++ i) {
127
+ Arrays . fill(dist[i], Integer . MAX_VALUE );
128
+ }
129
+ dist[1 ][1 ] = 0 ;
130
+ while (! q. isEmpty()) {
131
+ int [] e = q. pollFirst();
132
+ int u = e[0 ], d = e[1 ];
133
+ for (int v : g[u]) {
134
+ if (d + 1 < dist[v][0 ]) {
135
+ dist[v][0 ] = d + 1 ;
136
+ q. offerLast(new int []{v, d + 1 });
137
+ } else if (dist[v][0 ] < d + 1 && d + 1 < dist[v][1 ]) {
138
+ dist[v][1 ] = d + 1 ;
139
+ if (v == n) {
140
+ break ;
141
+ }
142
+ q. offerLast(new int []{v, d + 1 });
143
+ }
144
+ }
145
+ }
146
+ int ans = 0 ;
147
+ for (int i = 0 ; i < dist[n][1 ]; ++ i) {
148
+ ans += time;
149
+ if (i < dist[n][1 ] - 1 && (ans / change) % 2 == 1 ) {
150
+ ans = (ans + change) / change * change;
151
+ }
152
+ }
153
+ return ans;
154
+ }
155
+ }
88
156
```
89
157
90
158
### ** ...**
0 commit comments