zoukankan      html  css  js  c++  java
  • Aizu

    注意先保证距离最短,再来判断价格

    邻接矩阵回朝内存  ,要用邻接表的

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3f3f3f
    struct ac{
        int v,dis,cost;
    };
    int n,m;
    int dis[10002];
    int cost[10002];
    int vis[10002];
    vector<ac>rode[10002];
    void djst()
    {
        memset(dis,inf,sizeof(dis));
        memset(cost,inf,sizeof(cost));
        memset(vis,0,sizeof(vis));
        dis[1]=0;
        cost[1]=0;
        while(1) 
        {
            int k=-1,dmin=inf,cmin=inf;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j])
                {
                    if(dis[j]<dmin)
                    k=j,dmin=dis[j],cmin=cost[j];
                    else if(dis[j]==dmin)
                    {
                        if(cost[j]<cmin)
                        k=j,dmin=dis[j],cmin=cost[j];
                    }
                }    
            }
            if(k==-1) return ;
            vis[k]=1;
            
            for(int i=0;i<rode[k].size();i++)
            {
                int j=rode[k][i].v;
                if(!vis[j])
                {
                    if(dis[k]+rode[k][i].dis<dis[j])
                    {
                        dis[j]=dis[k]+rode[k][i].dis;
                        cost[j]=rode[k][i].cost;
                    }
                    else if(dis[k]+rode[k][i].dis==dis[j]&&cost[j]>rode[k][i].cost)
                    {
                        cost[j]=rode[k][i].cost;
                    }
                }
            }
        }
    }
    int main()
    {
        while(cin>>n>>m)
        {
            if(n+m==0) break;
            for(int i=1;i<=m;i++)
            {
                int a,c,b,d;
                cin>>a>>b>>c>>d;
                ac tt;
                tt.v=b,tt.dis=c,tt.cost=d;
                rode[a].push_back(tt);
                tt.v=a;
                rode[b].push_back(tt);
            }
            djst();
            int ans=0;
            for(int i=1;i<=n;i++){
                rode[i].clear();
                ans+=cost[i];
            }
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    SSH框架中使用注解和xml配置的区别
    web项目中log4j的配置
    嵌入式—ASCII码
    MATLAB
    MATLAB
    MATLAB
    MATLAB
    CentOS 7将网卡名称eno16777736改为eth0
    图像增强处理
    Debussy与modelsim联仿时 do 文件脚本
  • 原文地址:https://www.cnblogs.com/wpbing/p/9508764.html
Copyright © 2011-2022 走看看