大佬求助样例没过QAQ
查看原帖
大佬求助样例没过QAQ
556680
NRDI楼主2022/12/26 22:20
#include <bits/stdc++.h>
#define MAXN 1000010

using namespace std;

long long n, m, s;
long long dist[MAXN], head[MAXN], tot, maxn, l;
bool flag[MAXN];

struct Edge{
    int next, to, w;
};

Edge edge[MAXN];

void add_edge(long long x, long long y, long long z) {
    edge[tot].to = y;
    edge[tot].w = z;
    edge[tot].next = head[x];
    head[x] = tot ++;
}

void dijkstra() {
    priority_queue<pair<long long, long long>>que;
    dist[1] = 0;
    que.push(make_pair(0, 1));
    while(!que.empty()) {
        int x = que.top().second;
        que.pop();
        if (flag[x]) continue;
        flag[x] = true;
        for (long long i = head[x]; i != -1; i = edge[i].next) {
            long long j = edge[i].to;
            if (flag[j] == false && dist[x] + edge[i].w < dist[j]) {
                dist[j] = dist[x] + edge[i].w;
                que.push(make_pair(-dist[j], j));
            }
        }
    }
}

int main() {
    scanf("%lld%lld", &n, &m);
    memset(head, -1, sizeof(head));
    for (int i = 1; i <= n; i++) {
        dist[i] = 2147483647;
    }
    memset(flag, 0, sizeof(flag));
    for (long long i = 1; i <= m; i++) {
        int x1, y1, z1;
        cin >> x1 >> y1;
        add_edge(x1, y1, 1);
    }
    dijkstra();
    for (long long i = 1; i <= n; i++) {
        maxn = max(maxn, dist[i]);
    }
    for (long long i = 1; i <= n; i++) {
        if (dist[i] == maxn) {
            printf("%lld", i);
            break;
        }
    }
    printf(" %lld", maxn);
    for (int i = 1; i <= n; i++) {
        if (dist[i] == maxn) l ++;
    }
    printf(" %lld", l);
    return 0;
}

求求帮我看看

2022/12/26 22:20
加载中...