社区讨论

最短路模板超时求调

学术版参与者 4已保存回复 12

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@lul0o1qq
此快照首次捕获于
2024/04/04 17:10
2 年前
此快照最后确认于
2024/04/04 19:58
2 年前
查看原帖
最多有 10510^5 条带权无向边
CPP
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>> v[100010];
int d[100010];
	int n,m;
const int inf=1e9;
void Dijkstra(int start)
{
	priority_queue<pair<int,int>>q;
	for(int i=0;i<=100000;i++)
	{
		d[i]=inf;
	}
	d[1]=0;
	q.push(make_pair(0,1));
	while(!q.empty())
	{
		pair<int,int> p=q.top();q.pop();
		int w=p.first;
		int u=p.second;
		if(w>d[u])
		{
			continue;
		}
		int l=v[u].size();
		for(int i=0;i<l;i++)
		{
			pair<int,int> op=v[u][i];
			int f=op.first;
			int s=op.second;
			if(f+w<d[s])
			{
				d[s]=f+w;
				q.push(make_pair(d[s],s));
			}
		} 
	}
	if(d[n]==inf)
	{
		cout<<-1;
	}
	else
	{
		cout<<d[n];
	}
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int a,b,w;
		scanf("%d%d%d",&a,&b,&w);
		v[a].push_back(make_pair(w,b));
		v[b].push_back(make_pair(w,a));
	}
	Dijkstra(1);
}

回复

12 条回复,欢迎继续交流。

正在加载回复...