社区讨论

优先队列写不出来啊啊啊啊

P4779【模板】单源最短路径(标准版)参与者 6已保存回复 9

讨论操作

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

当前回复
9 条
当前快照
1 份
快照标识符
@mi7ct9ey
此快照首次捕获于
2025/11/20 19:34
4 个月前
此快照最后确认于
2025/11/20 19:34
4 个月前
查看原帖
复制的题解的优先队列写法。 然而运行仍然是WA
CPP
#include<cstdio>
#include<queue>
using namespace std;
struct node{
	int d,p;
	bool operator <(const node& x) const{
	return d>x.d;
	}
};
int v[500007],p[500007],w[500007],h[100007],d[100007],n,m,l,x,y,z,s;
priority_queue<node> q;
bool t[100007];
inline int Read(int &num)
{
	num=0;
	char ch=getchar();
	while (ch<'0'||ch>'9')
		ch=getchar();
	while (ch>='0'&&ch<='9')
	{
		num=(num<<1)+(num<<3)+ch-'0';
		ch=getchar();
	}
	return 0;
}
inline int Write(int &num)
{
	int cl=0;
	char c[47];
	do
	{
		c[++cl]=num%10+'0';
		num/=10;
	}
	while (num>0);
	for (int i=cl;i>=1;--i)
		putchar(c[i]);
	return 0;
}
int main()
{
	Read(n);
	Read(m);
	Read(s);
	for (register int i=1;i<=m;++i)
	{
		Read(x);
		Read(y);
		Read(z);
		v[i]=y;
		w[i]=z;
		p[i]=h[x];
		h[x]=i;
	}
	for (register int i=1;i<=n;++i)
		d[i]=2147483647;
	node vq;
	vq.p=s;
	vq.d=0;
	d[s]=0;
	q.push(vq);
	while (!q.empty())
	{
		vq=q.top();
		int e=vq.d;
		int f=vq.p;
		q.pop();
		if (t[vq.p])
			continue;
		t[vq.p]=1;
		for (int i=h[vq.p];i;i=p[i])
		{
			int u=v[i];
			if (d[u]>vq.d+w[i])
			{
				d[u]=vq.d+w[i];
				if (!t[i])
				{
					q.push((node){d[u],u});
					t[i]=0;
				}
			}
		}
	}
	for (int i=1;i<=n;++i)
	{
		Write(d[i]);
		putchar(' ');
	}
	return 0;
}

回复

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

正在加载回复...