結果
| 問題 | No.3326 岩井星人の帰星 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-30 01:50:43 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 45 ms / 2,000 ms |
| + 408µs | |
| コード長 | 1,610 bytes |
| 記録 | |
| コンパイル時間 | 2,001 ms |
| コンパイル使用メモリ | 200,612 KB |
| 実行使用メモリ | 17,372 KB |
| 最終ジャッジ日時 | 2026-10-30 01:50:56 |
| 合計ジャッジ時間 | 7,112 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge5_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 59 |
ソースコード
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
using Graph = vector<vector<int>>;
int N, M;
Graph G(200010);
bool ok[200010];
int D[200010];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>N>>M;
for (int i=0;i<M;i++){
int U, V; cin>>U>>V;
G[U].push_back(V);
G[V].push_back(U);
}
int L; cin>>L;
vector<int> rem(N + 1, -1);
vector<vector<int>> q(1005);
for (int i = 0; i < L; i++) {
int J, K; cin >> J >> K;
rem[J] = max(rem[J], K);
}
for (int i = 1; i <= N; i++) {
if (rem[i] != -1) {
q[rem[i]].push_back(i);
}
}
for (int k = 1000; k > 0; k--) {
for (int cur : q[k]) {
if (rem[cur] > k) continue;
for (int dst : G[cur]) {
if (rem[dst] < k - 1) {
rem[dst] = k - 1;
q[k - 1].push_back(dst);
}
}
}
}
for(int i = 1; i <= N; i++){
ok[i] = (rem[i] == -1);
}
if(! ok[1]) {
cout << "No" << "\n";
return 0;
}
for (int i=1;i<=N;i++) D[i]=-1;
D[1]=0;
queue<int> Q;
Q.push(1);
while(! Q.empty()){
int cur = Q.front(); Q.pop();
for (auto dst:G[cur]){
if(! ok[dst]) continue;
if(D[dst]!=-1) continue;
D[dst]=D[cur]+1;
Q.push(dst);
}
}
if(D[N]!=-1) {
cout << "Yes" << "\n";
cout << D[N] << "\n";
}
else cout << "No" << "\n";
return 0;
}