https://vjudge.net/problem/Aizu-2249

题意:计划图中有n个城市m条路,首都是1号城市,要选一些路去修,让各个城市到首都的路径最短,在路径最短的情况下修路费用最小。

题解:首都1号→源点→单源最短路→Dijkstra。对Dijkstra稍作修改,如果路径同样小,取费用更小的。费用是把这个点加进连通图的费用,而不是修出这条路的费用,否则最后累加会和之前相同路段的费用重复。(一道破题搞了我一个下午,条件没弄清楚,就是差一点,请大佬帮看一下,30秒修改后AC。)

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<set>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; int n,m;
struct edge
{
int to;
int dis;
int cost;
};
int d[];
int c[];
vector<edge>e[];
bool vis[];
int money; void Dijkstra()
{
memset(vis,false,sizeof(vis));
memset(d,inf,sizeof(d));
memset(c,inf,sizeof(c));
d[]=;
c[]=;
money=;///总花费
while(true)
{
int v=-;
for(int u=;u<=n;u++)
{
if( !vis[u] && ( v==- || d[u]<d[v] ) )
v=u;
}
if(v==-)
break;
vis[v]=true;
money+=c[v];///对于已经确定的点 修路的费用 累加起来 for(int i=;i<e[v].size();i++)
{
int u=e[v][i].to;
int dis=e[v][i].dis;
int cost=e[v][i].cost;
if( d[u] > d[v]+dis || ( d[u]==d[v]+dis && cost<c[u] ) )///核心判断
{
d[u] = d[v]+dis;
c[u] = cost;///c[u]是指 把u加进图的费用,而不是在v的费用基础上加的
}
}
}
} int main()
{
while(scanf("%d%d",&n,&m)&&(n+m))
{
for(int i=;i<=n;i++)
e[i].clear(); for(int i=;i<=m;i++)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
e[a].push_back({ b,c,d } );
e[b].push_back({ a,c,d } );
}
Dijkstra();
int ans=;
for(int i=;i<=n;i++)
ans+=c[i];
printf("%d\n",money);
}
return ;
}

Aizu2249-Road Construction-(Dijkstra)的更多相关文章

  1. Aizu-2249 Road Construction(dijkstra求最短路)

    Aizu - 2249 题意:国王本来有一个铺路计划,后来发现太贵了,决定删除计划中的某些边,但是有2个原则,1:所有的城市必须能达到. 2:城市与首都(1号城市)之间的最小距离不能变大. 并且在这2 ...

  2. Aizu2249 Road Construction(dijkstra优化+思路 好题)

    https://vjudge.net/problem/Aizu-2249 感觉这题和2017女生赛的Deleting Edge思路很像,都是先找最短路,然后替换边的. 但是这题用最朴素的dijkstr ...

  3. AOJ 2249 Road Construction (dijkstra)

    某国王需要修路,王国有一个首都和多个城市,需要修路.已经有修路计划了,但是修路费用太高. 为了减少修路费用,国王决定从计划中去掉一些路,但是需要满足一下两点: 保证所有城市都能连通 所有城市到首都的最 ...

  4. AOJ 2249 Road Construction(Dijkstra+优先队列)

    [题目大意] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2249 [题目大意] 一张无向图,建造每条道路需要的费用已经给出, 现 ...

  5. 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)

    迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...

  6. 最短路径之迪杰斯特拉(Dijkstra)算法

    迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...

  7. 理解最短路径——迪杰斯特拉(dijkstra)算法

    原址地址:http://ibupu.link/?id=29 1.       迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...

  8. 图论——迪杰斯特拉算法(Dijkstra)实现,leetcode

    迪杰斯特拉算法(Dijkstra):求一点到另外一点的最短距离 两种实现方法: 邻接矩阵,时间复杂度O(n^2) 邻接表+优先队列,时间复杂度O(mlogn)(适用于稀疏图) (n:图的节点数,m:图 ...

  9. 算法-迪杰斯特拉算法(dijkstra)-最短路径

    迪杰斯特拉算法(dijkstra)-最短路径 简介: 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中 ...

  10. 数据结构与算法——迪杰斯特拉(Dijkstra)算法

    tip:这个算法真的很难讲解,有些地方只能意会了,多思考多看几遍还是可以弄懂的. 应用场景-最短路径问题 战争时期,胜利乡有 7 个村庄 (A, B, C, D, E, F, G) ,现在有六个邮差, ...

随机推荐

  1. es6和es5函数参数和arguments的差别

    注: 这里说的 es5 代表的都是非严格模式下. es6之前函数的参数不能传默认值: function fn(a, b){ console.log(a) console.log(b) } fn(2) ...

  2. linux 软件多版本共存

    update-alternatives 命令用于处理 Linux 系统中软件版本的切换,使其多版本共存.alternatives 的管理目录 /etc/alternatives . alternati ...

  3. CLH lock 原理及JAVA实现

    --喜欢记得关注我哟[shoshana]--​ 前记 JUC中的Lock中最核心的类AQS,其中AQS使用到了CLH队列的变种,故来研究一下CLH队列的原理及JAVA实现 一. CLH背景知识 SMP ...

  4. FusionInsight大数据开发---HDFS应用开发

    HDFS应用开发 HDFS(Dadoop Distributed File System) HDFS概述 高容错性 高吞吐量 大文件存储 HDFS架构包含三部分 Name Node DataNode ...

  5. App.config 分开文件

    App.config 分开文件 分开文件里配置: <appSettings configSource="App_TestMachine.config"> App_Tes ...

  6. 什么是B+树

    什么是B+树呢?在说B+树之前我们先了解一下为什么要有B树,其实这些树最开始都是为了解决某种系统中,查询效率低的问题.B树其实最开始源于的是二叉树,二叉树是只有左右孩子的树,当数据量越大的时候,二叉树 ...

  7. JavaScript设计模式与开发实践随笔(三)

    封装 1. 封装数据 a)      只能依赖变量的作用域来实现封装特性,es6中可以通过symbol创建私有属性 var myObject = (function(){ var __name = ' ...

  8. vue 实现滚动到页面底部开始加载更多

    直接上代码: <template> <div class="newsList"> <div v-for="(items, index) in ...

  9. jquery设置css,animate设置多个属性

    $("p").css("color","red"); $("p").css({ "font-size" ...

  10. Web消息推送框架windows部署实践

    一.官方下载地址:https://www.workerman.net/web-sender 二.解压至任意目录下,双击start_for_win.bat,效果如下图: 三.打开Chrome浏览器访问: ...