6
  • 板块灌水区
  • 楼主lcy0506
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/18 16:16
  • 上次更新2024/7/18 16:55:35
查看原帖
6
1044302
lcy0506楼主2024/7/18 16:16

同一份代码P3371(弱化版)0分P3371(强化版)100分(从ABC352__D截下来的)

#include <bits/stdc++.h>
using namespace std;
struct node
{
	long long to,dis,next;
}edge[1000001];
long long n,m,p;
long long head[1000001],a[1000001],cnt=0,dis[1000001],vis[1000001];
void add(long long x,long long y,long long z)
{
	cnt++;
	edge[cnt].next=head[x];
	edge[cnt].to=y;
	edge[cnt].dis=z;
	head[x]=cnt;
}
void dij()
{
	memset(dis,0x3f3f3f,sizeof(dis));
	dis[p]=0;
	priority_queue<pair<int,int> >q;
	q.push(make_pair(0,1));
	while(!q.empty())
	{
		int u=q.top().second;
		q.pop();
		if(vis[u])
		continue;
		vis[u]=1;
		for(int i=head[u];i;i=edge[i].next)
		{
			int v=edge[i].to;
			if(dis[v]<=dis[u]+edge[i].dis)
			continue;
			dis[v]=dis[u]+edge[i].dis;
			q.push(make_pair(-dis[v],v));
		}
	}
}
int main()
{
	cin>>n>>m>>p;
	for(long long i=1;i<=m;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
	}
	dij();
    for(long long i=1;i<=n;i++)
    {
    	cout<<dis[i]<<" ";
	}
}
2024/7/18 16:16
加载中...