zoukankan      html  css  js  c++  java
  • poj3159最短路spfa+邻接表

    https://vjudge.net/contest/66569#problem/K

    相当于模板吧,第一次写spfa的

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #define ll long long
    using namespace std;
    const int N=1001000,inf=1000000000;
    ll d[N];
    struct {
        int to,next,w;
    }e[N];
    int H[N],x[N],y[N],z[N],V,E,num;
    void add(int a,int b,int cost)
    {
        e[num].w=cost;
        e[num].to=b;
        e[num].next=H[a];
        H[a]=num++;
    }
    void init()
    {
        for(int i=1;i<=V;i++)
        {
           d[i]=inf;//距离初始化为无穷大 
           H[i]=-1;//H【i】未访问过 
        }
        num=0;
    }
    ll spfa()
    {
        d[1]=0;
        bool vis[N];
        for(int i=1;i<=V;i++)vis[i]=0;
        queue<int>Q;
        Q.push(1);
        vis[1]=1;
        while(!Q.empty()){
            int t=Q.front();
            Q.pop();
            for(int k=H[t];k!=-1;k=e[k].next)
            {
                int w=e[k].w,v=e[k].to;
                if(w+d[t]<d[v])
                {
                    d[v]=w+d[t];
                    if(!vis[v])
                    {
                        vis[v]=1;
                        Q.push(v);
                    } 
                }
            } 
        }
        ll cnt=0;
        for(int i=1;i<=V;i++)cnt+=d[i];
        return cnt;
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        while(n--){
            scanf("%d%d",&V,&E);
            init();
            for(int i=0;i<E;i++)
            {
                scanf("%d%d%d",&x[i],&y[i],&z[i]);
                add(x[i],y[i],z[i]);
            }
            ll ans=0;
            ans+=spfa();
            init();
            for(int i=0;i<E;i++)
            {
                add(y[i],x[i],z[i]);
            }
            ans+=spfa();
            printf("%lld
    ",ans);
        }
    } 
  • 相关阅读:
    ros 录制
    shell 截取字符串
    Linux 关机
    shell获取字符串长度
    ubuntu14.04 设置开机自启动脚本
    获取本机ip的shell脚本
    shell 杀掉指定进程的服务
    html 绘制矩形轨迹,选中区域
    shell模拟ctrl c停止
    shell 字符串提取数字
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/6503088.html
Copyright © 2011-2022 走看看