2516 2014年中山市选拔赛 dwarf tower
来源:互联网 发布:风暴英雄mac版下载 编辑:程序博客网 时间:2024/04/30 22:27
- 题目
- 题解
- 代码
题目
Vasya在玩一个叫做”Dwarf Tower”的游戏,这个游戏中有n个不同的物品,它们的编号为1到n。现在Vasya想得到编号为1的物品。
获得一个物品有两种方式:
1. 直接购买该物品,第i件物品花费的钱为ci
2. 用两件其他物品合成所需的物品,一共有m种合成方式。
请帮助Vasya用最少的钱获得编号为1的物品。
题解
一个有向图,每种合成方式都弄成两条边,然后spfa
时间复杂度O(nm)
代码
var a:array[1..10000]of longint; h:array[1..1000000]of longint; z,x,y,ls,next:array[1..200000]of longint; v:array[1..200000]of boolean; n,m,i,j,k,r:longint;procedure spfa;var u,l,i,j:longint;begin l:=0; while l<r do begin inc(l); u:=h[l]; i:=ls[u]; while i>0 do begin if a[u]+a[y[i]]<a[z[i]] then begin a[z[i]]:=a[u]+a[y[i]]; if v[z[i]] then begin v[z[i]]:=false; inc(r); h[r]:=z[i]; end; end; i:=next[i]; end; v[u]:=true; end;end;begin readln(n,m); for i:=1 to n do read(a[i]); fillchar(v,sizeof(v),true); for i:=1 to m do begin readln(z[i*2-1],x[i*2-1],y[i*2-1]); next[i*2-1]:=ls[x[i*2-1]]; ls[x[i*2-1]]:=i*2-1; z[i*2]:=z[i*2-1];x[i*2]:=y[i*2-1];y[i*2]:=x[i*2-1]; next[i*2]:=ls[x[i*2]]; ls[x[i*2]]:=i*2; if v[x[i*2]] then begin inc(r); h[r]:=x[i*2]; v[x[i*2]]:=false; end; if v[y[i*2]] then begin inc(r); h[r]:=y[i*2]; v[y[i*2]]:=false; end; end; spfa; writeln(a[1]);end.
1 0
- 2516 2014年中山市选拔赛 dwarf tower
- 2515 2014年中山市选拔赛 投票
- SSL P2515 2014年中山市选拔赛 投票
- Dwarf tower
- dwarf tower
- dwarf tower
- dwarf tower
- acm HNU Dwarf Tower
- 湖大训练赛4 Dwarf Tower
- HOJ 12847 Dwarf Tower (最短路)
- NEERC 2013 Dwarf Tower (最短路)
- 2016山东ACM热身赛 Dwarf Tower
- Gym 100269D Dwarf Tower(最短路)
- dwarf
- dwarf
- DWARF
- Tower
- tower
- spark MLlib学习-卡方检测
- 09 類的繼承
- B
- 一些基本的Linux命令
- Linux中的用户和用户组
- 2516 2014年中山市选拔赛 dwarf tower
- iframe嵌套界面自适应,可高度自由收缩
- HBase学习之负载均衡(balance)
- Spring MVC处理XML数据(1)
- 面试问题
- POJ
- 递归递推练习 G
- 设计模式
- 关于datagrid中field排序问题