結果

問題 No.3326 岩井星人の帰星
コンテスト
ユーザー bolero
提出日時 2025-10-19 15:08:39
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,770 bytes
コンパイル時間 2,588 ms
コンパイル使用メモリ 289,204 KB
実行使用メモリ 17,200 KB
最終ジャッジ日時 2025-11-01 09:26:26
合計ジャッジ時間 9,506 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 30 WA * 29
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main()
{
    int N, M;
    cin >> N >> M;
    vector<vector<int>> graph(N);
    rep(i, M)
    {
        int u, v;
        cin >> u >> v;
        u--, v--;
        graph[u].push_back(v);
        graph[v].push_back(u);
    }

    vector<int> observe_dists(N, -1);

    int L;
    cin >> L;
    rep(i, L)
    {
        int J, K;
        cin >> J >> K;
        J--;
        observe_dists[J] = max(observe_dists[J], K);
    }

    priority_queue<pair<int, int>> pq;
    rep(i, N)
    {
        if (observe_dists[i] == -1)
        {
            continue;
        }
        pq.push({observe_dists[i], i});
    }

    while (pq.size())
    {
        auto [dist, now] = pq.top();
        pq.pop();
        if (dist == 0 || observe_dists[now] != dist)
        {
            continue;
        }

        for (int next : graph[now])
        {
            if (dist - 1 < observe_dists[next])
            {
                continue;
            }

            observe_dists[next] = dist - 1;
            pq.push({next, dist - 1});
        }
    }

    vector<int> dists(N, -1);
    queue<int> qu;

    if (observe_dists[0] == -1)
    {
        dists[0] = 0;
        qu.push(0);
    }

    while (qu.size())
    {
        auto now = qu.front();
        qu.pop();
        for (int next : graph[now])
        {
            if (observe_dists[next] != -1 || dists[next] != -1)
            {
                continue;
            }

            dists[next] = dists[now] + 1;
            qu.push(next);
        }
    }

    if (dists[N - 1] == -1)
    {
        cout << "No" << endl;
        return 0;
    }

    cout << "Yes" << endl;
    cout << dists[N - 1] << endl;

    return 0;
}
0