题目
分析
利用bfs不断更新当前结点的最长路。
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
queue<int> q;
int dis[2000], edge[2000][2000];
int n, m;
void spfa()
{
memset(dis, -1, sizeof(dis));
dis[1] = 0;
q.push(1);
while (!q.empty())
{
int now = q.front();
q.pop();
for (int i = 1; i <= n; i++)
{
if (edge[now][i] && dis[i] < dis[now] + edge[now][i])
{
dis[i] = dis[now] + edge[now][i];
q.push(i);
}
}
}
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++)
{
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
edge[u][v] = max(edge[u][v], w);
}
spfa();
printf("%d", dis[n]);
return 0;
}