dijkstra70ptsWA求助
查看原帖
dijkstra70ptsWA求助
536745
WaTleZero_pt楼主2022/10/6 21:56
#include<bits/stdc++.h>
using namespace std;
struct Edge{
    int u,v;long long w;int nxt;
};
class Graph{
    public:
    int head[10010];
    Edge edge[50010]; int cntE;
    void AddEdge(int u,int v,long long w){
        edge[++cntE].u=u;
        edge[cntE].v=v;
        edge[cntE].w=w;
        edge[cntE].nxt=head[u];
        head[u]=cntE;
    }
}gpsA,gpsB,FINAL;
class Dijkstra{
    public:
    long long dis[10010]; bool vis[10010];
    priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
    void dijkstra(int head[],Edge edge[],int cnt,int st){
        memset(dis,0x3f,sizeof(dis));
        memset(vis,0,sizeof(vis));
        while(!q.empty()) q.pop();
        dis[st]=0;
        q.push(make_pair(0,st));
        while(!q.empty()){
            int k=q.top().second; q.pop();
            if(vis[k]) continue;
            vis[k]=1;
            for(int i=head[k];i;i=edge[i].nxt){
                if(dis[k]+edge[i].w<dis[edge[i].v]){
                    dis[edge[i].v]=dis[k]+edge[i].w;
                    q.push(make_pair(dis[edge[i].v],edge[i].v));
                }
            }
        }
    }
}GPSa,GPSb,Final;
int n,m,st,ed,u,v;long long w1,w2;
int main(){
    scanf("%d%d",&n,&m);
    st=1; ed=n;
    for(int i=1;i<=m;i++){
        scanf("%d%d%lld%lld",&u,&v,&w1,&w2);
        gpsA.AddEdge(u,v,w1);
        gpsB.AddEdge(u,v,w2);
    }
    GPSa.dijkstra(gpsA.head,gpsA.edge,gpsA.cntE,st);
    GPSb.dijkstra(gpsB.head,gpsB.edge,gpsB.cntE,st);
    for(int i=1;i<=m;i++){
        int tot=0;
        if(GPSa.dis[gpsA.edge[i].u]+gpsA.edge[i].w!=GPSa.dis[gpsA.edge[i].v]) tot++;
        if(GPSb.dis[gpsB.edge[i].u]+gpsB.edge[i].w!=GPSb.dis[gpsB.edge[i].v]) tot++;
        FINAL.AddEdge(gpsA.edge[i].u,gpsA.edge[i].v,tot);
    }
    Final.dijkstra(FINAL.head,FINAL.edge,FINAL.cntE,st);
    printf("%lld",Final.dis[ed]);
}

记录详情

#3,#7,#10\texttt{\#3,\#7,\#10}WA\texttt{WA} 了,是什么情况啊?

2022/10/6 21:56
加载中...