求助,本地能过到你谷上全输出NO
  • 板块学术版
  • 楼主OcTar
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/5 23:21
  • 上次更新2023/11/3 11:24:37
查看原帖
求助,本地能过到你谷上全输出NO
594916
OcTar楼主2023/7/5 23:21

记录 code:

#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[50005], d[505];
vector<node> G[505];
bool vis[505];

void dijkstra(int n) {
    priority_queue<node> q;
    memset(vis, 0, sizeof(vis));
    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) {
        cout << "NO" << endl;
    } else {
        cout << d[n] - 1 << endl;
    }
}
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/7/5 23:21
加载中...