锰锌求助WA最短路
查看原帖
锰锌求助WA最短路
399116
LYqwq楼主2022/7/19 15:22
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
template<typename T=long long>
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-'0',ch=getchar();
    if(flag) return X;
    return ~(X-1);
}

#define int long long
typedef long long ll;
const ll N=1e6+5,M=1e6+5,inf=0x3f3f3f3f3f3f3f3f;
struct edge{
    int to,nxt;
    ll val;
}e[M];
int n,m,q,u,v;
ll w,ans,cnt;
int head[N],top;
ll dist[N];
int vis[N];
priority_queue<pair<int,int>> h;

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 s){
    memset(dist,0x3f,sizeof(dist));
    memset(vis,0,sizeof(vis));
    h.push(make_pair(0,s));
    dist[s]=0;
    while(!h.empty()){
        u=h.top().second;
        h.pop();
        if(vis[u]) continue;
        vis[u]=1;
        for(int i=head[u]; i; i=e[i].nxt){
            v=e[i].to;
            if(dist[v]>dist[u]+e[i].val){
                dist[v]=dist[u]+e[i].val;
                h.push(make_pair(-dist[v],v));
            }
        }
    }
}

signed main(){
    n=read(),m=read(),q=read();
    while(m--){
        u=read(),v=read(),w=read();
        add(u,v,w);
        add(v,u,w);
    }
    while(q--){
        dijkstra(read());
        ans=-1145141919,cnt=1;
        for(int i=0; i<n; i++)
            if(dist[i]==inf) continue;
            else if(dist[i]>ans){
                ans=dist[i];
                cnt=1;
            }else if(dist[i]==ans) cnt++;
        printf("%lld %lld\n",ans,cnt);
    }
    return 0;
}

一直WA,调不出来了/kel

2022/7/19 15:22
加载中...