题目:给出若干个建筑之间的一些路,每条路都有对应的长度和需要的花费,问在保证源点1到其他个点的距离最短的情况下,最少的花费是多少/

思路:和一般的最短路问题相比,多了一个 数组id【i】,用来记录到达i点在距离最短的情况下是由那条边到达的。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<queue>
#include<string>
#include<algorithm>
#define MAXSIZE 1000005
#define LL long long
#define INF 0x3f3f3f3f
using namespace std; //给出若干个建筑之间的一些路,每条路都有对应的长度和需要的花费,
//问在保证源点1 到其他个点的距离最短的情况下,最少的花费是多少 int n,m,vis[MAXSIZE],a[MAXSIZE],k,dist[MAXSIZE],id[MAXSIZE]; struct node
{
int u;
int v;
int w;
int c;
int next;
}G[MAXSIZE]; void Add(int u,int v,int w,int c)
{
G[k].u = u;
G[k].v = v;
G[k].w = w;
G[k].c = c;
G[k].next = a[u];
a[u] = k++;
} int dij()
{
memset(vis,,sizeof(vis));
memset(id,-,sizeof(id));
dist[] = ;
int minn ,p;
for(int i=;i<k;i++)
{
minn = INF;
for(int j=;j<=n;j++)
{
if(!vis[j] && dist[j] < minn)
{
minn = dist[j];
p = j;
}
} if(minn == INF)
break;
vis[p] = ;
for(int j=a[p];j!=-;j=G[j].next)
{
int v = G[j].v;
if(dist[v] > dist[p] + G[j].w && !vis[v]) //距离更短就更新
{
dist[v] = dist[p] + G[j].w;
id[v] = j;
} //距离相同,花费更小就更新
else if(id[v]!=- && dist[v] == dist[p] + G[j].w && G[j].c < G[id[v]].c && !vis[v])
{
id[v] = j;
}
}
} int sum=;
for(int i=;i<=n;i++)
{
if(id[i] == -)
continue;
else
sum += G[id[i]].c;
}
return sum;
} void Init()
{
memset(a,-,sizeof(a));
memset(vis,,sizeof(vis));
for(int i=;i<MAXSIZE;i++)
dist[i] = INF;
k = ;
} int main()
{
int u,v,w,c;
while(scanf("%d%d",&n,&m),n+m)
{
Init(); for(int i=;i<=m;i++)
{
scanf("%d%d%d%d",&u,&v,&w,&c);
Add(u,v,w,c);
Add(v,u,w,c);
} int ans = dij(); printf("%d\n",ans);
}
return ;
}

Aizu - 2249 Road Construction的更多相关文章

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

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

  2. AOJ 2249 Road Construction (dijkstra)

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

  3. 【Aizu - 2249】Road Construction(最短路 Dijkstra算法)

    Road Construction Descriptions Mercer国王是ACM王国的王者.他的王国里有一个首都和一些城市.令人惊讶的是,现在王国没有道路.最近,他计划在首都和城市之间修建道路, ...

  4. POJ3352 Road Construction(边双连通分量)

                                                                                                         ...

  5. POJ3352 Road Construction (双连通分量)

    Road Construction Time Limit:2000MS    Memory Limit:65536KB    64bit IO Format:%I64d & %I64u Sub ...

  6. poj 3352 Road Construction【边双连通求最少加多少条边使图双连通&&缩点】

    Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10141   Accepted: 503 ...

  7. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)

    POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...

  8. POJ3352 Road Construction 双连通分量+缩点

    Road Construction Description It's almost summer time, and that means that it's almost summer constr ...

  9. 【Tarjan缩点】PO3352 Road Construction

    Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12532   Accepted: 630 ...

随机推荐

  1. vue,elementUI,less,axios,qs的安装及打包

    目前一直使用vue去搭建项目,我个人习惯用Visual Studio Code编辑工具,所以下面的所有操作都是在这个编辑器中 在安装的时候,为了避免安装过程中出错,你最好安装了淘宝镜像(官网:http ...

  2. mac java_home等系统参数配置

    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/HomeCLASSPAHT=.:$JAVA_HOME/lib ...

  3. DB2常用命令整理

    1.基本命令 查看命令选项list command options信息帮助SQL statement例子:statement =30081SQL30081启动当前的DB2数据库管理实例db2start ...

  4. bzoj3237 cdq分治+可撤销并查集

    https://www.lydsy.com/JudgeOnline/problem.php?id=3237 年轻的花花一直觉得cdq分治只能用来降维,不料竟然可以用来分治询问 N<=100000 ...

  5. CSS样式链接和文字常用属性

    行内: <div style="color:red;"></div> 内嵌<style>div{background-color:red;}&l ...

  6. 关于vue的小实例

    学习网址:http://www.runoob.com/vue2/vue-tutorial.html 下面是我在上面学着写的两个小例子, 1. 实现点击全选,下面的均被选中,再点击一下,下面的均取消选择 ...

  7. go 命令

    go build go build,是我们非常常用的命令,它可以启动编译,把我们的包和相关的依赖编译成一个可执行的文件. go help build 帮助命令 go build go build . ...

  8. Zookeeper+Kafka完全分布式实战部署

    Zookeeper+Kafka完全分布式实战部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实我之前部署过kafak和zookeeper的完全分布式,集群是可以正常使用没错, ...

  9. SpringMvc+jQuery 文件拖拽上传、选择上传

    最近做了个简易的基于boostrap的文件上传功能,jsp版本的,后续会完善更多的功能,不过现在已经能用了,需要的小伙伴,直接引用下面的文件内容直接copy到自己的项目中就ok了,效果如图: file ...

  10. laravel 5.4 fopen(): Filename cannot be empty

    1.出错的报错信息(我在用laravel5.4文件上传时候出错的) laravel 5.4 fopen(): Filename cannot be empty 2.解决的方法 在php.ini中修改临 ...