题目:给出若干个建筑之间的一些路,每条路都有对应的长度和需要的花费,问在保证源点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. Jquery Mobile表单

    三个前提: 1.每个form必须设置method和action属性 2.每个form必须有页面范围内唯一的id标识 3.每个form必须有一个label标签,通过设置它的for属性来匹配元素的id & ...

  2. CSUST 1011 神秘群岛 (Dijkstra+LCA)

    神秘群岛   Description 小J继续着周游世界的旅程,这次他来到了一个神奇的群岛.这片群岛有n个岛屿,同时这些岛屿被标上了1-n的编号. 每个岛屿上面都有神奇的传送门,传送门可以把小J从当前 ...

  3. (贪心) nyoj1036-非洲小孩

    题目描述: 家住非洲的小孩,都很黑.为什么呢?第一,他们地处热带,太阳辐射严重.第二,他们不经常洗澡.(常年缺水,怎么洗澡.)现在,在一个非洲部落里,他们只有一个地方洗澡,并且,洗澡时间很短,瞬间有木 ...

  4. Altium Designer 17 ------ 多层板设计

    Pullback:在内电层边缘设置一个去铜边界,以保证内电层边界距离PCB边缘有一个安全间距.

  5. thinkphp中用ajax对数据库进行操作

    删除和查看详情操作的共同语句:就是怎么显示表? 1.在主体中写表的开头行,想要显示的内容,并且加载数据也要显示的地方也建张表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 & ...

  6. Linux系统诊断必备技能之一:lsof 用法详解!

    lsof(list open files)是一个查看当前系统文件的工具.在linux环境下,任何事物都以文件的形式存在,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件:如传输控制协议 (T ...

  7. qml: 打包 和 发布

    Qt 提供了打包工具windeployqt, 利用该工具可以很方便的解决qt的依赖问题(注:通过实际验证,发现该工具只能解决大部分的依赖问题,不知道是不是本人 没有正确的使用的问题). qt源码编译r ...

  8. Kubernetes 集群ca验证

    创建集群时跳过ca验证 # vim /etc/kubernetes/apiserver 去除KUBE_ADMISSION_CONTROL中的 SecurityContextDeny,ServiceAc ...

  9. Centos7下安装OpenLDAP+Phpldapadmin及主主同步

    1.环境介绍及初始化准备 server1:172.16.138.87 openldap01 server2:172.16.138.88 openldap02 配置yum源 wget -O /etc/y ...

  10. vue基础篇---路由的实现《2》

    现在我们来实现这样一个功能: 一个页面,包含登录和注册,点击不同按钮,实现登录和注册页切换: 编写父组件 index.html <div id="app"> <s ...