蒟蒻求助qwq
查看原帖
蒟蒻求助qwq
377050
Linear_Basis楼主2020/11/23 19:39

rt,用priority_queue写的dijkstra,用结构体里存的d值比大小100分,用dis数组比大小只有30分

结构体版

#include <bits/stdc++.h>
using namespace std;
const int N=100005,M=500005;
struct node
{
	int v,d;
};
struct cmp
{
	bool operator()(node x,node y)
	{
		return x.d>y.d
	}
};
priority_queue<node,vector<node>,cmp> q;
int n,m,s,dis[N],v[M],nxt[M],w[M],first[N],idx,flag[N];
void add(int x,int y,int z)
{
	v[++idx]=y;
	w[idx]=z;
	nxt[idx]=first[x];
	first[x]=idx;
}
int main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
	}
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	q.push({s,0});
	while(!q.empty())
	{
		node t=q.top();
		q.pop();
		if(flag[t.v])
		{
			continue;
		}
		flag[t.v]=1;
		for(int i=first[t.v];i;i=nxt[i])
		{
			int k=v[i];
			if(dis[k]-dis[t.v]>w[i])
			{
				dis[k]=dis[t.v]+w[i];
				q.push({k,dis[k]});
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		cout<<(dis[i]==0x3f3f3f3f?2147483647:dis[i])<<" ";
	}
	return 0;
}

dis数组版

#include <bits/stdc++.h>
using namespace std;
const int N=100005,M=500005;
int n,m,s,dis[N],v[M],nxt[M],w[M],first[N],idx,flag[N];
struct cmp
{
	bool operator()(int x,int y)
	{
		return dis[x]>dis[y];
	}
};
priority_queue<int,vector<int>,cmp> q;
void add(int x,int y,int z)
{
	v[++idx]=y;
	w[idx]=z;
	nxt[idx]=first[x];
	first[x]=idx;
}
int main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
	}
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	q.push(s);
	while(!q.empty())
	{
		int t=q.top();
		q.pop();
		if(flag[t])
		{
			continue;
		}
		flag[t]=1;
		for(int i=first[t];i;i=nxt[i])
		{
			int k=v[i];
			if(dis[k]-dis[t]>w[i])
			{
				dis[k]=dis[t]+w[i];
				q.push(k);
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		cout<<(dis[i]==0x3f3f3f3f?2147483647:dis[i])<<" ";
	}
	return 0;
}

神犇们帮忙找找问题,谢谢!求求了qwq

2020/11/23 19:39
加载中...