不是怎么MLE啊
查看原帖
不是怎么MLE啊
890839
Wt_sister楼主2024/8/6 19:03
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int n, m, d;
struct node
{
    int v, next;
    int s, len;
};
struct Queue
{
    int v;
    double dis;
    int t;
    bool operator<(const Queue &x) const
    {
        return dis > x.dis;
    }
};
node e[N];
priority_queue<Queue> q;
double dis[N][N];
pair<int, int> ans[N][N];
int vis[N][N], head[N], cnt;
void add(int a, int b, int c, int d)
{
    e[++cnt] = {b, head[a], c, d};
    head[a] = cnt;
}
void print(int d, int x)
{
    if (d == 1)
        return;
    print(ans[d][x].first, ans[d][x].second);
    printf("%d ", d - 1);
}
void dijkstra()
{
    memset(dis, 0x3f, sizeof dis);
    dis[1][70] = 0;
    q.push({0, 70, 1});
    while (!q.empty())
    {
        int u = q.top().v, S = q.top().dis;
        q.pop();
        if (vis[u][S])
            continue;
        vis[u][S] = 1;
        for (int i = head[u]; ~i; i = e[i].next)
        {
            int speed = S;
            if (e[i].s)
                speed = e[i].s;
            if (dis[e[i].v][speed] > dis[u][S] + e[i].len * 1.0 / speed)
            {
                dis[e[i].v][speed] = dis[u][S] + e[i].len * 1.0 / speed;
                ans[e[i].v][speed] = make_pair(u, S);
                q.push({e[i].v, dis[e[i].v][speed], speed});
            }
        }
    }
    return;
}
int main()
{
    memset(head, -1, sizeof head);
    cin >> n >> m >> d;
    for (int i = 1; i <= m; i++)
    {
        int a, b, l, s;
        cin >> a >> b >> s >> l;
        add(a + 1, b + 1, s, l);
    }
    dijkstra();
    int ans = 0;
    dis[++d][ans] = 0x3f3f3f3f;
    for (int i = 1; i <= 1000; i++)
    {
        if (dis[d][i] < dis[d][ans])
            ans = i;
    }
    print(d, ans);
    return 0;
}
2024/8/6 19:03
加载中...