52pts求助
查看原帖
52pts求助
447941
xdd5689楼主2023/7/19 21:00

rt,代码如下

#include <bits/stdc++.h>
#define l long long
using namespace std;
struct xdd
{
	l u,v,w;
};
vector<xdd> s;
vector<l> a[100006];
l n,m,p,maxn,ans[100006],dis[100006];
priority_queue<pair<l,l> > q;
bool b[100006];
l xxx()
{
    if(q.empty()) return 0;
	l h=q.top().second;
	q.pop();
	return h;
}
void dfs(l st)
{

	if(st==0)
	{
		return ;
	}    
	if(b[st]==true) return ;
	b[st]=true;
	for(l i=0;i<a[st].size();i++)
	{
		l p=s[a[st][i]].v;
		if(!b[p])
		{
			if(dis[p]>dis[st]+s[a[st][i]].w)
			{
				dis[p]=dis[st]+s[a[st][i]].w;
				q.push(make_pair(-dis[p],p));
			}
                 
		}
	}
	dfs(xxx());
}
void mian()
{
	cin>>n>>m>>p;
	for(l i=1;i<=m;i++)
	{
		l x,y,z;
		cin>>x>>y>>z;
		xdd e;
		e.u=x,e.v=y,e.w=z;
		s.push_back(e);
	}
	for(l i=0;i<m;i++)
	{
		a[s[i].u].push_back(i);
	}
	for(l i=1;i<=n;i++)
	{
		dis[i]=pow(2,31)-1;
	}
	dis[p]=0;
	//q.push(make_pair(-dis[p],p));
    //q.pop();
	dfs(p);
	for(l i=1;i<=n;i++) printf("%lld ",dis[i]);
}
int main()
{
	mian();
	return 0;
}
2023/7/19 21:00
加载中...