最长路dijstra46分求调玄关
  • 板块P1807 最长路
  • 楼主Tang_xy
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/5/13 13:12
  • 上次更新2024/5/13 18:08:38
查看原帖
最长路dijstra46分求调玄关
1046969
Tang_xy楼主2024/5/13 13:12
#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int maxn=500000+10;
struct node{
	int to,w;
	node(int t,int ww){
		to=t; w=ww;
	}
};
vector<node> vec[maxn]; 
int head[maxn],vis[maxn],dis[maxn],n,m;
struct qnode {
	int id,d;
	qnode(int i,int dd){
		id=i; d=dd;
	}
	friend bool operator<(qnode n1,qnode n2){
		return n1.d>n2.d;
	}
};
void dij(int s){
	priority_queue<qnode> q;
	memset(vis,0,sizeof(vis));
	memset(dis,-1,sizeof(dis));
	dis[s]=0;
	q.push(qnode(s,0));
	while(!q.empty()){
		int u=q.top().id; q.pop(); 
		if(vis[u]) continue;
		vis[u]=true;
		for(int i=0;i<vec[u].size();i++){
			int v=vec[u][i].to;
			int w=vec[u][i].w;
			if(dis[v]<dis[u]+w) {
				dis[v]=dis[u]+w;
				q.push(qnode(v,dis[v]));
			}
		}
	}
}
signed main(){
	int u,v,w;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		vec[u].push_back(node(v,w));
	} 
	dij(1);
	cout<<dis[n]; 
	return 0;
}
2024/5/13 13:12
加载中...