day-20

百度之星2021 初试1

https://acm.hdu.edu.cn/showproblem.php?pid=6998


const int maxn = 1e6 + 7;

int n, t, m, k;

int dp[maxn];

void solve() {
    cin >> t;
    while (t--) {
        cin >> n >> m >> k;
        memset(dp, -1, sizeof dp);
        dp[k] = 0;
        for (int i = 1, u, v; i <= m; i++) {
            cin >> u >> v;
            int su = dp[u], sv = dp[v];
            if (su == -1 && sv == -1) continue;
            if (su == -1) dp[v] = sv + 1, dp[u] = sv;
            if (sv == -1) dp[u] = su + 1, dp[v] = su;
            if (su != -1 && sv != -1) dp[u] = min(sv, su + 1), dp[v] = min(su, sv + 1);
        }
        for (int i = 1; i <= n; i++)
            i == n ? cout << dp[i] << "\n" : cout << dp[i] << " ";
    }
}

posted @ 2021-08-02 22:03  naymi  阅读(27)  评论(0)    收藏  举报