dijkstraTLE最后一个点
查看原帖
dijkstraTLE最后一个点
1100122
yiluntaiyang楼主2024/11/23 11:09
#include<bits/stdc++.h>
using namespace std;
#define MAXN 200010
const int inf=2147483647;
int n,m,s,cnt;
int dis[3][MAXN],h[MAXN],to[MAXN],val[MAXN],nxt[MAXN];
bool vis[MAXN];
void add(int a,int b,int c)
{
	cnt++;
	to[cnt]=b;
	val[cnt]=c;
	nxt[cnt]=h[a];
	h[a]=cnt;
}
struct node{
	int v,w;
	bool operator < (const node &a) const
	{
	return a.w>w;
	}
} tmp;
priority_queue<node> q;
void dijkstra()
{
	for(int i=1;i<=n;++i) 
	{
	dis[0][i]=dis[1][i]=inf;
	} 
	dis[0][1]=0;
	tmp.v=1;
	tmp.w=0;
	q.push(tmp);
	while(!q.empty())
	{
		int u=q.top().v,d=q.top().w;
		q.pop();
		if(d>dis[1][u]) continue;
		for(int i=h[u];i;i=nxt[i])
		{
			if(dis[0][to[i]]>d+val[i])
			{
				dis[1][to[i]]=dis[0][to[i]];
				tmp.v=to[i],tmp.w=dis[0][to[i]]=d+val[i];
				q.push(tmp);
			}
			if(dis[1][to[i]]>d+val[i]&&dis[0][to[i]]<d+val[i])
			{
				tmp.v=to[i];
				tmp.w=dis[1][to[i]]=d+val[i];
				q.push(tmp);
			}
		}
	}
}
int main()
{ 
  	ios::sync_with_stdio(0);
  	cin.tie(0);
  	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;++i)
	{
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
	}
	dijkstra();
	cout<<dis[1][n];
	return 0;
} 


2024/11/23 11:09
加载中...