hdu3790 最短路变形


这题就是比普通的最短路多维护了一个cot数组,cot【i】表示的是起点到i节点的最短路径对应的最小花费。要注意重边的处理,我用邻接表存图,应该是重边没处理好,毕竟邻接表处理重边不太方便要把全部的都遍历一遍,以后有重边的情况还是用邻接矩阵存图算了。

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
#define maxe 100000*2+5
#define inf 0x3f3f3f3f
typedef  long long ll;
struct edge
{
    int v;
    ll w,cost;
    edge(int vv=0,ll ww=0,ll costcost=0)
    {
        v=vv;
        w=ww;
        cost=costcost;
    }
};
ll mp[maxn][maxn],cot[maxn][maxn];
ll dis[maxn],ccos[maxn];
int vis[maxn],n,m,st,et;
void spfa(int v0)
{
    queue<int>q;
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
        ccos[i]=dis[i]=inf;
    dis[v0]=0;
    ccos[v0]=0;//初始化为0,应该起点到其本身的最短距离为0,当然最小花费为0
    q.push(v0);
    vis[v0]=1;
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        vis[u]=0;

        for(int v=1;v<=n;v++)
        {
            ll w=mp[u][v],cost=cot[u][v];
            if(dis[v]>dis[u]+w)
            {
                dis[v]=dis[u]+w;
                ccos[v]=ccos[u]+cost;
                if(!vis[v])
                    q.push(v);
            }
            else
                if((dis[v]==(dis[u]+w))&&(ccos[v]>ccos[u]+cost))
                {
                    ccos[v]=ccos[u]+cost;
                    if(!vis[v])
                        q.push(v);

                }
        }
    }
}


int main()
{
    std::ios::sync_with_stdio(false);
    while(cin>>n>>m)
    {
        if(n==0&&m==0) break;
        memset(mp,0x3f,sizeof(mp));
        memset(cot,0x3f,sizeof(cot));
        for(int i=1;i<=m;i++)
        {
            int u,v;
            ll w,c;
            cin>>u>>v>>w>>c;
            if(w<mp[u][v])
            {
                mp[u][v]=mp[v][u]=w;
                cot[u][v]=cot[v][u]=c;
            }
            else
                if(w==mp[u][v]&&c<cot[u][v])
                {
                    cot[u][v]=cot[v][u]=c;

                }

        }

        cin>>st>>et;
        spfa(st);
        cout<<dis[et]<<" "<<ccos[et]<<endl;
    }


    return 0;
}

优质内容筛选与推荐>>
1、Beans(dp,两次dp)
2、Java反射的实例
3、Java反射的实例
4、jquery each函数的使用
5、软件与设备


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号