結果
| 問題 |
No.3263 違法な散歩道
|
| コンテスト | |
| ユーザー |
とんぼ
|
| 提出日時 | 2025-09-06 13:54:05 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 226 ms / 2,000 ms |
| コード長 | 1,066 bytes |
| コンパイル時間 | 3,220 ms |
| コンパイル使用メモリ | 284,544 KB |
| 実行使用メモリ | 23,168 KB |
| 最終ジャッジ日時 | 2025-09-06 13:54:24 |
| 合計ジャッジ時間 | 8,065 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define rep(i, N) for(i = 0; i < N; i++)
#define ll long long
int main(void) {
ll N,M;
set<ll>con[100009];
bool T[100009]={0};
ll i, j, k;
cin>>N>>M;
rep(i,M){
ll a,b;
cin>>a>>b;
con[a].insert(b);
con[b].insert(a);
}
ll K;cin>>K;
rep(i,K){
ll t; cin>>t;
T[t] = true;
}
ll dist[100009][6];
rep(i,N+1)rep(j,6)dist[i][j]=INT64_MAX;
queue<pair<ll,ll>>q;
q.push({1,0});
dist[1][0]=0;
while(!q.empty()){
auto p = q.front(); q.pop();
ll v = p.first;
ll c = p.second;
for(auto nv: con[v]){
ll nc;
if(T[nv])nc=c+1;
else nc=0;
if(nc>=5)continue;
if(dist[nv][nc] > dist[v][c] + 1){
dist[nv][nc] = dist[v][c] + 1;
q.push({nv,nc});
}
}
}
ll ans=INT64_MAX;
rep(i,6)ans=min(ans,dist[N][i]);
if(ans==INT64_MAX)ans=-1;
cout<<ans<<endl;
return 0;
}
とんぼ