Skip to content

Commit 1099c3c

Browse files
authored
Merge pull request #1077 from AlgorithmWithGod/khj20006
[20251009] BOJ / G1 / Doomsday / 권혁준
2 parents a09c61e + 834a103 commit 1099c3c

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
```cpp
2+
#include <bits/stdc++.h>
3+
using namespace std;
4+
5+
int N, M, W, F, t[50000]{}, d[50000][4]{};
6+
vector<vector<pair<int, int>>> v(50000);
7+
8+
int main(){
9+
cin.tie(0)->sync_with_stdio(0);
10+
11+
cin>>N>>M>>W>>F;
12+
for(int i=1,a;i<=W;i++) {
13+
cin>>a;
14+
t[a] |= 1;
15+
}
16+
for(int i=1,a;i<=F;i++) {
17+
cin>>a;
18+
t[a] |= 2;
19+
}
20+
21+
for(int a,b,c;M--;) {
22+
cin>>a>>b>>c;
23+
v[a].emplace_back(b,c);
24+
v[b].emplace_back(a,c);
25+
}
26+
27+
for(int i=0;i<N;i++) for(int j=0;j<4;j++) d[i][j] = 1e9;
28+
d[0][t[0]] = 0;
29+
priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>, greater<>> q;
30+
q.emplace(0,0,t[0]);
31+
while(!q.empty()) {
32+
auto [s, n, k] = q.top(); q.pop();
33+
if(s > d[n][k]) continue;
34+
for(auto [i,c]:v[n]) {
35+
int r = k | t[i];
36+
if(d[i][r] > s+c) {
37+
d[i][r] = s+c;
38+
q.emplace(s+c,i,r);
39+
}
40+
}
41+
}
42+
cout<<d[0][3];
43+
44+
}
45+
```

0 commit comments

Comments
 (0)