求助
  • 板块灌水区
  • 楼主wo_hen_la
  • 当前回复11
  • 已保存回复11
  • 发布时间2023/8/7 15:09
  • 上次更新2023/11/3 05:24:23
查看原帖
求助
794701
wo_hen_la楼主2023/8/7 15:09

P1342

提交记录

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,dis[1000005],v[1000005],cnt; 
struct node
{
    int w,len;
};
queue<int> r;
vector<node> e[1000005];
vector<node> f[1000005];
void spfa1(int s)
{
    for(int i=1;i<=n;i++){
        dis[i]=2147483647;
        v[i]=0;
    }
    v[s]=1;
    dis[s]=0;
    r.push(s);
    while(!r.empty()){
        int x=r.front();
        r.pop();
        v[x]=1;
        for(int i=0;i<e[x].size();i++){
            if(dis[e[x][i].w]>dis[x]+e[x][i].len){
                dis[e[x][i].w]=dis[x]+e[x][i].len;
                if(v[e[x][i].w]) continue;
                r.push(e[x][i].w);
            }
        }
    }
    for(int i=2;i<=n;i++){
    	cnt+=dis[i];
	}
    return;
}
void spfa2(int s)
{
	queue<int> q;
	r=q;
    for(int i=1;i<=n;i++){
        dis[i]=2147483647;
        v[i]=0;
    }
    v[s]=1;
    dis[s]=0;
    r.push(s);
    while(!r.empty()){
        int x=r.front();
        r.pop();
        v[x]=1;
        for(int i=0;i<f[x].size();i++){
            if(dis[f[x][i].w]>dis[x]+f[x][i].len){
                dis[f[x][i].w]=dis[x]+f[x][i].len;
                if(v[f[x][i].w]) continue;
                r.push(f[x][i].w);
            }
        }
    }
    for(int i=2;i<=n;i++){
    	cnt+=dis[i];
	}
    return;
}
signed main()
{
	int x,y,l;
    scanf("%lld%lld",&n,&m);
    while(m--){
        
        scanf("%lld%lld%lld",&x,&y,&l);
        node h;
        h.w=y,h.len=l;
        e[x].push_back(h);
        h.w=x,h.len=l;
        f[y].push_back(h);
    }
	spfa1(1);
	spfa2(1);
    printf("%lld",cnt);
    return 0;
}
2023/8/7 15:09
加载中...