博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Aizu-2249 Road Construction(dijkstra求最短路)
阅读量:5902 次
发布时间:2019-06-19

本文共 1795 字,大约阅读时间需要 5 分钟。

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

题解:现在来分析一下,使得n个点联通至少需要n-1条路,然后因为求最小消耗,所以路最多也就只有n-1条,除了首都以外,每一个都市都对应着一条路,我们只需要在dijkstra求最短路的时候,每次更新最短路的距离就更新这个点所对应的边,最后每个城市的点对应的边就是符合要求的边,最后求和一下就是答案了。

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define ll long long 8 typedef pair
pll; 9 const int INF = 0x3f3f3f3f;10 const int N = 10000+5;11 struct Node12 {13 int nt, to, d, c;14 }Edge[N*4];15 int head[N], dis[N], pre[N];16 int cnt = 0, n, m;17 void add(int u, int v, int d, int c)18 {19 Edge[cnt].to = v;20 Edge[cnt].d = d;21 Edge[cnt].c = c;22 Edge[cnt].nt = head[u];23 head[u] = cnt++;24 }25 void dijkstra()26 {27 memset(dis, INF, sizeof(dis));28 dis[1] = 0;29 priority_queue
, greater
> q;30 q.push(pll(0,1));31 while(!q.empty())32 {33 int u = q.top().second, d = q.top().first;34 q.pop();35 if(dis[u] != d) continue;36 for(int i = head[u]; ~i; i = Edge[i].nt)37 {38 int v = Edge[i].to;39 if(dis[v] > dis[u] + Edge[i].d)40 {41 dis[v] = dis[u] + Edge[i].d;42 pre[v] = i;43 q.push(pll(dis[v],v));44 }45 else if(dis[v] == dis[u]+Edge[i].d && Edge[i].c < Edge[pre[v]].c)46 {47 pre[v] = i;48 q.push(pll(dis[v],v));49 }50 }51 }52 }53 int main()54 {55 ios::sync_with_stdio(false);56 cin.tie(0);57 cout.tie(0);58 while(cin >> n >> m, n+m)59 {60 memset(head, -1, sizeof(head));61 cnt = 0;62 int x, y, d, c;63 for(int i = 0; i < m; i++)64 {65 cin >> x >> y >> d >> c;66 add(x,y,d,c);67 add(y,x,d,c);68 }69 dijkstra();70 ll ans = 0;71 for(int i = 2; i <= n; i++)72 {73 ans += Edge[pre[i]].c;74 }75 cout << ans << endl;76 }77 return 0;78 }

 

转载于:https://www.cnblogs.com/MingSD/p/8417834.html

你可能感兴趣的文章
Fast通道获得Win10 Mobile Build 14977更新
查看>>
《BackTrack 5 Cookbook中文版——渗透测试实用技巧荟萃》—第3章3.6节识别操作系统...
查看>>
linux系统防火墙iptables命令规则及配置的示例
查看>>
10 个顶尖的 Linux 开源人工智能工具
查看>>
Firefox 跟踪保护技术将页面加载时间减少 44%
查看>>
聚合(根)、实体、值对象精炼思考总结
查看>>
java解析虾米音乐
查看>>
rails将类常量重构到数据库对应的表中之三
查看>>
mysql 多行合并函数
查看>>
【案例】RAID卡写策略改变引发的问题
查看>>
第四十八讲:tapestry 与 淘宝kissy editor编辑器带图片上传
查看>>
Linux/Centos 重置Mysql root用户密码
查看>>
[C语言]unicode与utf-8编码转换(一)
查看>>
利用PDO导入导出数据库
查看>>
DDR3
查看>>
分支 统计字数
查看>>
艾级计算机的发展与挑战
查看>>
RocketMQ事务消息实战
查看>>
mysql-mmm-2.2.1安装手册
查看>>
搭建yum源服务器
查看>>