社区讨论
优先队列写不出来啊啊啊啊
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 条回复,欢迎继续交流。
正在加载回复...