#include<iostream>
#include<queue>
#include<vector>
using namespace std;const int N=2e3+10;
int n,m;
struct st{
int to;
int w;
bool operator<(const st &a)const{//大根堆 ;优先队列排序规则return w<a.w;}};
int vis[N];
int dis[N];
vector<st>e [N];//邻接表
priority_queue<st>q;//优先队列voidadd(int u,int v,int w){//vector构造邻接表
st t;
t.to=v;
t.w=w;
e[u].push_back(t);}voiddjk(){
st t;
int s,x;for(int i=1;i<=n;i++)
dis[i]=0;//初始化为0
t.to=1;
t.w=0;
q.push(t);while(q.size()){
t=q.top();
q.pop();
x=t.to;if(vis[x])continue;for(int i=0;i<e[x].size();i++){
int v,w;
v=e[x][i].to;
w=e[x][i].w;if(dis[v]<dis[x]+w)//{
dis[v]=dis[x]+w;
t.to=v;
t.w=w;if(vis[v]==0)
q.push(t);}}}if(dis[n]==0)
cout<<-1;else
cout<<dis[n];}
int main(){
cin>>n>>m;for(int i=0;i<m;i++){
int u,v,w;
cin>>u>>v>>w;add(u,v,w);//构造邻接表}djk();return0;}
菜鸟生成记(63)P1807 最长路这一题可以叫做 单源最长路径模板题;Dijkstra+优先队列(小根堆,边权最大的放在队首)#include<iostream>#include<queue>#include<vector>using namespace std;const int N=2e3+10;int n,m;struct st{ int to; int w; bool operator<(const st &a)const