• poj1511【最短路spfa】


    题意:
    计算从源点1到各点的最短路之和+各点到源点1的最短路之和;

    思路:
    源点这个好做啊,可是各点到源点,转个弯就是反向建边然后求一下源点到各点的最短路,就是各点到源点的最短路,在两幅图里搞;

    贴一发挫code……….

    #include <iostream>
    #include <cstdio>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    typedef __int64 LL;
    
    const int INF=1000000000+10;
    const int N=1e6+10;
    
    struct asd{
        int to;
        int w;
        int next;
    };
    asd q[N*4];
    int head1[N*2],head2[N*2];
    int dis[N];
    bool vis[N];
    int tol;
    int n,m;
    int qq[N*10];//利用数组模拟队列...这样写更好哦~
    int s,t;
    
    LL spfa(int *head)
    {
        s=0;
        t=1;
        for(int i=1;i<=n;i++)
        {
            dis[i]=INF;
            vis[i]=0;
        }
        vis[1]=1;
        dis[1]=0;
        qq[s]=1;
    
        while(s<t)
        {
            int u=qq[s];s++;
            vis[u]=0;
            for(int v=head[u];v!=-1;v=q[v].next)
            {
                int i=q[v].to;
                if(dis[i]>dis[u]+q[v].w)
                {
                    dis[i]=dis[u]+q[v].w;
                    if(!vis[i])
                    {
                        vis[i]=1;
                        qq[t++]=i;
                    }
                }
            }
        }
        LL ans=0;
        for(int i=1;i<=n;i++)
            ans+=dis[i];
        return ans;
    }
    
    void init()
    {
        tol=0;
        memset(head1,-1,sizeof(head1));
        memset(head2,-1,sizeof(head2));
    }
    
    void add(int *head,int a,int b,int c)
    {
        q[tol].to=b;
        q[tol].w=c;
        q[tol].next=head[a]++;
        head[a]=tol++;
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int a,b,c;
            scanf("%d%d",&n,&m);
            init();
            for(int i=0;i<m;i++)
            {
                scanf("%d%d%d",&a,&b,&c);
                add(head1,a,b,c);
                add(head2,b,a,c);
            }
            printf("%lld
    ",spfa(head1)+spfa(head2));
        }
        return 0;
    }
  • 相关阅读:
    elasticsearch 6.x.x 获取客户端方法
    struts2+spring 配置404和500错误页面
    linux 部署redis集群 碰到的坑
    Linux下安装redis
    struts加载spring
    有关struts中DispatchAction的用法小结
    spring AOP原理
    struts2.0的工作原理?
    Spring MVC的实现原理
    spring 的单例模式
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934896.html
Copyright © 2020-2023  润新知