結果
| 問題 |
No.3263 違法な散歩道
|
| コンテスト | |
| ユーザー |
Cafe1942
|
| 提出日時 | 2025-09-06 13:42:56 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 97 ms / 2,000 ms |
| コード長 | 1,525 bytes |
| コンパイル時間 | 1,409 ms |
| コンパイル使用メモリ | 117,820 KB |
| 実行使用メモリ | 24,932 KB |
| 最終ジャッジ日時 | 2025-09-06 13:43:18 |
| 合計ジャッジ時間 | 4,226 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#include <iostream>
#include <iomanip>//小数点出力用
//cout << fixed << setprecision(10) << ans;
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <unordered_map>
using ll = long long;
using namespace std;
#define modPHash (ll)((1LL<<61)-1)
#define modP (ll)998244353
bool chkrng0idx(int pos, int sup) { return (0 <= pos && pos < sup); }
int clk4(int num) { return (num - 2) * (num % 2); }
void yn(bool tf) { cout << (tf ? "Yes\n" : "No\n"); }
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
cin >> N >> M;
vector<int>nxt[250000];
for (int i = 0;i < M;i++) {
int U, V;
cin >> U >> V;
nxt[U].push_back(V);
nxt[V].push_back(U);
}
ll dp[250000][6];
for (int i = 0;i < 250000;i++) {
for (int j = 0;j < 6;j++) {
dp[i][j] = -1;
}
}
bool iwai[250000] = { 0 };
int K;
cin >> K;
while (K--) {
int X;
cin >> X;
iwai[X] = 1;
}
dp[1][0] = 0;
queue<pair<int,int>>Q;
Q.push({ 1,0 });
while (Q.size()) {
int now = Q.front().first;
int com = Q.front().second;
Q.pop();
for (int i = 0;i < nxt[now].size();i++) {
if (iwai[nxt[now][i]]) {
if (com != 4) {
if (dp[nxt[now][i]][com + 1] == -1) {
dp[nxt[now][i]][com + 1] = dp[now][com] + 1;
Q.push({ nxt[now][i] ,com + 1 });
}
}
}
else {
if (dp[nxt[now][i]][0] == -1) {
dp[nxt[now][i]][0] = dp[now][com] + 1;
Q.push({ nxt[now][i] ,0 });
}
}
}
}
cout << dp[N][0];
return 0;
}
Cafe1942