社区讨论

91分 [求调(马蜂较好)]

P1807最长路参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mliw8thd
此快照首次捕获于
2026/02/12 11:23
上周
此快照最后确认于
2026/02/14 16:40
5 天前
查看原帖

起因是我们课上刚学的01bfs(然后我就想来看看这节课学的dijkstra)

然后就爆零了...

CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;

struct node
{
    int id, size;
}g[1505][1505];

int ans[1505];
int n, m;

void dij()
{
    memset(ans, -1, sizeof(ans));
    priority_queue<int, vector<int>, greater<int> > q;
    q.push(1);
    ans[1] = 0;
    while(!q.empty())
    {
        int x = q.top();
        q.pop();
        for(int i = 1; i <= n; i++)
        {
            if(g[x][i].size < -1e8)
            {
                continue;
            }
            if(ans[i] < ans[x] + g[x][i].size)
            {
                ans[i] = ans[x] + g[x][i].size;
                q.push(i);
            }
        }
    }
}

signed main()
{
    cin >> n >> m;
    memset(g, -0x3f3f3f, sizeof(g));
    for(int i = 1; i <= m; i++)
    {
        int x, y, z;
        cin >> x >> y >> z;
        if(g[x][y].size < z)
        {
            g[x][y] = node{y, z};
        }
    }
    dij();
    cout << ans[n] << "\n";
}

回复

4 条回复,欢迎继续交流。

正在加载回复...