結果
| 問題 |
No.3263 違法な散歩道
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-09-06 13:20:49 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 142 ms / 2,000 ms |
| コード長 | 1,236 bytes |
| コンパイル時間 | 4,297 ms |
| コンパイル使用メモリ | 287,280 KB |
| 実行使用メモリ | 13,712 KB |
| 最終ジャッジ日時 | 2025-09-06 13:21:02 |
| 合計ジャッジ時間 | 7,687 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct dcin{template<typename T>dcin&operator>>(T&x){return std::cin>>x,x--,*this;}}dcin;
int main(){
ll n,m,k; cin >> n >> m;
vector e(n,vector<ll>());
for(ll i = 0;i<m;i++){
ll u,v; dcin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
cin >> k;
vector<bool> iwai(n);
for(ll i = 0;i<k;i++){
ll v;dcin >> v;
iwai[v] = true;
}
vector dp(5,vector<ll>(n,LLONG_MAX>>4));
dp[0][0] = 0;
queue<pair<ll,ll>> q;
q.emplace(0,0);
while(q.size()){
auto[met,cur] = q.front(); q.pop();
for(ll to : e[cur]){
if(iwai[to] && met < 4){
if(dp[met][cur]+1 < dp[met+1][to]){
dp[met+1][to] = dp[met][cur]+1;
q.emplace(met+1,to);
}
}
if(!iwai[to]){
if(dp[met][cur]+1 < dp[0][to]){
dp[0][to] = dp[met][cur]+1;
q.emplace(0,to);
}
}
}
}
ll ans = LLONG_MAX;
for(ll i = 0;i<5;i++)ans = min(ans,dp[i][n-1]);
if(ans == (LLONG_MAX>>4))ans = -1;
cout << ans << endl;
}