再学SPFA,结果只有20分,求助!
  • 板块学术版
  • 楼主御坂10026号
  • 当前回复11
  • 已保存回复11
  • 发布时间2020/9/17 13:08
  • 上次更新2023/11/5 13:06:14
查看原帖
再学SPFA,结果只有20分,求助!
337410
御坂10026号楼主2020/9/17 13:08

RT,几个月前学了SPFA,当时能AC,现在却不行了,对不也没对比出来什么,求助!``` #include

#include

#include

#include

#define ll long long

using namespace std;

queue q;

ll n,m,s;

ll d[100005],u[500005],v[500005],w[500005],now[100005],before[500005];

bool flag[100005];

inline ll read(){ ll z=1,num=0;

char c=getchar();

while(c>'9'||c<'0'){
    if(c=='-')
        z=-1;

    c=getchar();
}

while(c>='0'&&c<='9'){
    num=(num<<1)+(num<<3)+(c^48);
    c=getchar();
}

return z*num;

}

inline void write(ll x){ char num[101];

int k=0;

if(x==0)
    putchar('0');

if(x<0){
    putchar('-');

    x=-x;
}

while(x){
    num[++k]=x%10+'0';

    x/=10;
}

while(k)
    putchar(num[k--]);

putchar(' ');
return;

}

ll inf=2147483647;

int main(){ n=read(),m=read(),s=read();

memset(before,-1,sizeof(before));
for(register int i=1;i<=n;i++){
    now[i]=-1;
    d[i]=inf;
}

for(register int i=1;i<=m;i++){
    u[i]=read(),v[i]=read(),w[i]=read();

    before[i]=now[u[i]];

    now[u[i]]=i;
}

q.push(s);

d[s]=0;

while (!q.empty()){
    int x=q.front();

    q.pop();

    if(flag[x])
        continue;

    flag[x]=true;

    for(register int i=now[x];i!=-1;i=before[i])
        if(d[v[i]]>d[x]+w[i]){
            d[v[i]]=d[x]+w[i];
            q.push(v[i]);
        }
}

for(register int i=1;i<=n;i++)
    write(d[i]);

system("pause");
return 0;

}

2020/9/17 13:08
加载中...