Skip to content

Commit eaaa517

Browse files
authored
[20251008] BOJ / P5 / 전투기 출격 / 권혁준
1 parent 646ac51 commit eaaa517

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
```cpp
2+
#include <bits/stdc++.h>
3+
using namespace std;
4+
using ll = long long;
5+
6+
ll N, M, R, d[101][101]{}, e[101]{}, v[100001]{}, s[100001]{};
7+
8+
int main(){
9+
cin.tie(0)->sync_with_stdio(0);
10+
11+
cin>>N>>M>>R;
12+
for(int i=1;i<=M;i++) for(int j=1;j<=M;j++) cin>>d[i][j];
13+
for(int i=1;i<=M;i++) for(int j=1;j<=M;j++) for(int k=1;k<=M;k++) d[j][k] = min(d[j][k], d[j][i] + d[i][k]);
14+
15+
for(int i=1;i<=M;i++) cin>>e[i];
16+
17+
for(int p=1,i=1;i<=N;i++) {
18+
cin>>v[i];
19+
s[i] = s[i-1] + d[p][v[i]];
20+
p = v[i];
21+
}
22+
23+
ll mn = 1e18, ans = 1e18;
24+
for(int i=1;i<=N;i++) {
25+
int l = i, r = N, m = (l+r)>>1;
26+
ll f = s[i] + e[v[i]];
27+
while(l<r) {
28+
ll z = 0;
29+
if(m < N) z += d[v[i]][v[m+1]] + s[N]-s[m+1];
30+
if(f+z <= R) r = m;
31+
else l = m+1;
32+
m = (l+r)>>1;
33+
}
34+
ll cnt = m-i, res = f;
35+
if(m < N) res += d[v[i]][v[m+1]] + s[N]-s[m+1];
36+
if(res > R) continue;
37+
if(cnt < mn || (cnt == mn && res < ans)) mn = cnt, ans = res;
38+
}
39+
if(mn == 1e18) cout<<-1;
40+
else cout<<mn<<' '<<ans;
41+
42+
}
43+
```

0 commit comments

Comments
 (0)