为啥wa了,大神给点意见,本蒟蒻不会
查看原帖
为啥wa了,大神给点意见,本蒟蒻不会
1115544
Duanshuangli楼主2024/8/7 09:52
#include<iostream>
#include<queue>
#include<cstring>
#define int long long 
using namespace std;
typedef pair<int,int>PII;
const int N=2e5+10;
int n,m;
int h[N],e[N],ne[N],w[N],idx=0;//链式前向星 
int dist[N];//原点到各个点的距离, 
bool vis[N];
void add(int a,int b,int c)
{
	e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
void dijkstra()
{
	memset(dist,0x3f3f3f3f,sizeof dist);
	priority_queue<PII,vector<PII>,greater<PII> >heap;
	heap.push({0,1});//first是距离,second是节点
	while(heap.size())
	{
		auto t=heap.top();
		heap.pop();
		int ver=t.second,dis=t.first;//节点,距离 
		if(vis[ver]) continue;
		vis[ver]=true;
		for(int i=h[ver];i!=-1;i=ne[i])
		{
			int j=e[i];//与上一条边相连的节点,就是b	
			if(dist[j]>dist[ver]+w[i])
			{
				dist[j]=dist[ver]+w[i];
				heap.push({dist[j],j});
			}
		}	
	}
	if(dist[n]==0x3f3f3f3f) cout<<-1<<" ";
	else cout<<dist[n]<<" ";	
} 
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	memset(h,-1,sizeof h);
	cin>>n>>m;
	while(m--)
	{
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);//无向图,需要存双向边 
	}
	dijkstra();
	return 0;
}
2024/8/7 09:52
加载中...