0pts 求助,dijkstra错了qwq 求大佬帮调
查看原帖
0pts 求助,dijkstra错了qwq 求大佬帮调
270854
二叉苹果树楼主2022/8/2 01:57
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int dis[100005],vis[100005];
struct edge
{
    int v,w;
};
struct node
{
    int dis,u;
    bool operator<(const node& a) const {return dis>a.dis;}
};
vector<edge> e[100005];
priority_queue<node>pq;
void dijkstra(int n,int s)
{
    for(int i=1;i<=n*2;i++)
        dis[i]=1e9,vis[i]=false;
    dis[s]=0;
    pq.push((node){0,s});
    while(!pq.empty())
    {
        int u=pq.top().u;
        pq.pop();
        if(vis[u])
            continue;
        vis[u]=true;
        for(int j=0;j<e[u].size();j++)
        {
            edge ed=e[u][j];
            int v=ed.v,w=ed.w;
            if(dis[v]>dis[u]+w)
                dis[v]=dis[u]+w,pq.push((node){dis[v],v});
        }
    }
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int u,v,w;
        cin>>u>>v>>w;
        e[u].push_back((edge){v,w});
        e[u+n].push_back((edge){v+n,w});
    }
    long long ans=0;
    dijkstra(n,1);
    for(int i=2;i<=n;i++)
        ans+=dis[i];
    dijkstra(n,1+n);
    for(int i=2+n;i<=n*2;i++)
        ans+=dis[i];
    cout<<ans<<endl;
    return 0;
}

样例 output 56

2022/8/2 01:57
加载中...