求助,Dijkstra 写崩了
查看原帖
求助,Dijkstra 写崩了
421781
liuzimingc楼主2021/4/13 19:14

rt。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define endl '\n'
#define inf 0x3f3f3f3f
#define MAXN 855
#define MAXM 2905
#define M(x,y) make_pair(x,y)

int n,m,k;
int tot,u,v,w,s;
int fr[MAXN],to[MAXM],nex[MAXM],val[MAXM],dis[MAXN];
int con[MAXN],ans=inf;
bool vis[MAXN];

inline void add(int x,int y,int z) {to[++tot]=y;val[tot]=z;nex[tot]=fr[x];fr[x]=tot;}
priority_queue<pair<int,int> >q;
inline int dijkstra() {
    memset(vis,false,sizeof(vis));
    for (re int i=1;i<=n;i++) dis[i]=inf;
    dis[s]=0;vis[s]=true;
    q.push(M(0,s));
    while (!q.empty()) {
        int x=q.top().second;q.pop();
        if (vis[x]) continue;
        vis[x]=true;
        for (re int i=fr[x];i;i=nex[i]) {
            int y=to[i],z=val[i];
            if (dis[x]+z<dis[y]) {dis[y]=dis[x]+z;q.push(M(-dis[y],y));}
        }
    }
    int sum=0;
    for (re int i=1;i<=n;i++) sum+=dis[i]*con[i];
    return sum;
}
int main() {
    scanf("%d%d%d",&k,&n,&m);
    for (re int i=1;i<=k;i++) {scanf("%d",&u);con[u]++;}
    while (m--) {
        scanf("%d%d%d",&u,&v,&w);
        add(u,v,w);add(v,u,w);
    }
    for (re int i=1;i<=n;i++) {
        //int hh=dijkstra();
        s=i;if (con[i]) ans=min(ans,hh);
        //cout<<hh<<endl;
    }
    cout<<ans<<endl;
    return 0;
}

本应输出 88,结果输出了 99……

2021/4/13 19:14
加载中...