全RE求助
查看原帖
全RE求助
399116
LYqwq楼主2022/8/17 14:42
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
template<typename T=int>
inline T read(){
    T X=0; bool flag=1; char ch=getchar();
    while(ch<'0' || ch>'9'){if(ch=='-') flag=0; ch=getchar();}
    while(ch>='0' && ch<='9') X=(X<<1)+(X<<3)+(ch^48),ch=getchar();
    if(flag) return X;
    return ~(X-1);
}

const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f;
struct edge{
    int to,nxt,val;
}e[M<<1];
int n,m,x,u[M],v[M],w[M],ans;
int head[N],top;
int dist[2][N],d[N],vis[N];
priority_queue<pair<int,int>> q;

void add(int u,int v,int w){
    top++;
    e[top].to=v;
    e[top].val=w;
    e[top].nxt=head[u];
    head[u]=top;
}

void dijkstra(int k){
    memset(dist[k],inf,sizeof(dist));
    memset(vis,0,sizeof(vis));
    dist[k][x]=0;
    q.push({0,x});
    while(!q.empty()){
        int u=q.top().second;
        q.pop();
        if(vis[u]) continue;
        vis[u]=1;
        for(int i=head[u]; i; i=e[i].nxt){
            int v=e[i].to;
            if(dist[k][v]>dist[k][u]+e[i].val){
                dist[k][v]=dist[k][u]+e[i].val;
                q.push({-dist[k][v],v});
            }
        }
    }
}

int main(){
    n=read(),m=read(),x=read();
    for(int i=1; i<=m; i++){
        u[i]=read(),v[i]=read(),w[i]=read();
        add(u[i],v[i],w[i]);
    }
    dijkstra(0);
    memset(head,0,sizeof(head));
    top=0;
    for(int i=1; i<=m; i++)
        add(v[i],u[i],w[i]);
    dijkstra(1);
    for(int i=1; i<=n; i++)
        ans=max(ans,dist[0][i]+dist[1][i]);
    printf("%d\n",ans);
    return 0;
}

我和这个帖子里的楼主情况差不多,洛谷IDE都正常,交上去全RE,这个大佬好像是写spfa重构了代码才过的,有没有什么办法可以不写spfa搞过去啊QwQ

2022/8/17 14:42
加载中...