蒟蒻 30 pts 求助
查看原帖
蒟蒻 30 pts 求助
1025905
O_cTar楼主2023/10/17 17:15

rt,只过了#4,5,9。

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
struct node {
    int v, w;
    node() {}
    node(int v, int w) : v(v), w(w) {}
    bool operator < (const node &b) const { return w > b.w; }
};
int k, a[50010], d[510];
vector<node> G[510];
bool vis[510];

void dijkstra(int n) {
    priority_queue<node> q;
    memset(d, 0x3f, sizeof(d));
    d[1] = 0;
    q.push(node(1, 0));
    while (!q.empty()) {
        node temp = q.top();
        q.pop();
        int u = temp.v;
        if (vis[u]) {
            continue;
        }
        vis[u] = 1;
        for (int i = 0; i < G[u].size(); i++) {
            int v = G[u][i].v, w = G[u][i].w;
            if (d[v] > d[u] + w) {
                d[v] = d[u] + w;
                q.push(node(v, d[v]));
            }
        }
    }
    if (d[n] == inf) printf("NO\n");
    else printf("%d\n", d[n] - 1);
}
int main() {
    int m, n;
    scanf("%d%d", &m, &n);
    string ss;
    getline(cin, ss);
    for (int i = 1; i <= m; i++) {
        int p = 0;
        string s;
        getline(cin, s);
        for (int j = 0; j < s.size(); j++) {
            int sum = 0;
            if (s[j] != ' ') {
                while (j < s.size() && s[j] != ' ') {
                    sum = sum * 10 + (s[j++] - '0');
                }
            }
            a[++p] = sum;
        }
        for (int j = 1; j <= p; j++) {
            for (int l = j + 1; l <= p; l++) {
                G[a[j]].push_back(node(a[l], 1));
            }
        }
    }
    dijkstra(n);
    return 0;
}
2023/10/17 17:15
加载中...