結果
問題 |
No.3263 違法な散歩道
|
ユーザー |
|
提出日時 | 2025-09-06 15:23:47 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 134 ms / 2,000 ms |
コード長 | 1,082 bytes |
コンパイル時間 | 3,107 ms |
コンパイル使用メモリ | 293,780 KB |
実行使用メモリ | 23,536 KB |
最終ジャッジ日時 | 2025-09-06 15:23:55 |
合計ジャッジ時間 | 6,213 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
#include<bits/stdc++.h> using namespace std; using ll =long long; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll N,M; cin>>N>>M; vector<vector<int>> G(N); for(int i=0;i<M;i++){ int u,v; cin>>u>>v; u--;v--; G[u].push_back(v); G[v].push_back(u); } vector<bool> I(N,0); int K; cin>>K; for(int i=0;i<K;i++){ int a; cin>>a; I[a-1]=1; } queue<array<int,2>> Q; Q.push({0,0}); vector<vector<ll>> D(N,vector<ll>(5,1e18)); D[0][0]=0; vector<vector<bool>> seen(N,vector<bool>(5,0)); while(!Q.empty()){ auto [n,c]=Q.front(); Q.pop(); if(seen[n][c])continue; seen[n][c]=1; for(int v:G[n]){ int nc=c; if(I[v])nc++; else nc=0; if(nc==5)continue; if(seen[v][nc])continue; if(D[v][nc]<=D[n][c]+1)continue; D[v][nc]=D[n][c]+1; Q.push({v,nc}); } } cout<<(D[N-1][0]<1e17?D[N-1][0]:-1)<<"\n"; }