TLE80
查看原帖
TLE80
658679
lihyit楼主2025/6/27 21:32
#include<bits/stdc++.h>
using namespace std;
struct edge
{
	long long v,w;
};
vector<edge> e[200010];
long long dis[200010],vis[200010];
set<pair<long long,long long>> b; 
void dijkstra(long long s,long long n)
{
	for(long long i=1;i<=n;++i) 
	{
		dis[i]=1e18;
		b.insert({i,dis[i]});
	}
	b.erase({s,dis[s]});
	dis[s]=0;
	b.insert({s,0});
	while(b.size())
	{
    	long long tmp=(*b.begin()).first;
    	b.erase(*b.begin());
	    for(auto i:e[tmp])
	    {
	    	if(dis[tmp]+i.w<dis[i.v])
	    	{
	    		b.erase({i.v,dis[i.v]});
	    		dis[i.v]=dis[tmp]+i.w;
	    		b.insert({i.v,dis[i.v]});
			}
		}
	}
}
int main()
{
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	long long n,m,s,q;
	cin>>n>>m>>s>>q;
	for(long long i=1;i<=m;++i)
	{
		long long u,v,t;
		cin>>u>>v>>t;
		e[u].push_back({v,t});
		e[v].push_back({u,t});
	}
	dijkstra(s,n);
	while(q--)
	{
		long long h;
		cin>>h;
		cout<<dis[h]<<endl;
	}
	return 0;
}

改好后关注

2025/6/27 21:32
加载中...