题意:

花花住在 H 国。H 国有 n 个城市,其中 1 号城市为其首都。城市间有 n 1 条单向道路。从任意一个城市出发,都可以沿着这些单向道路一路走到首都。事实上,从任何一个城市走到首都的路径是唯一的。

过路并不是免费的。想要通过某一条道路,你必须使用一次过路券。H 国一共有 m 种过路券,每张过路券以三个整数表示:v k w:你可以在城市 v 以价格 w 买到一张过路券。这张券可以使用 k 次。这意味着,拿着这张券通过了 k 条道路之后,这张券就不能再使用了。

请注意你同一时间最多只能拥有最多一张过路券。但你可以随时撕掉手中已有的过路券,并且在所在的城市再买一张。

花花家在首都。他有 q 位朋友,他希望把这些朋友们都邀请到他家做客。所以他想要知道每位朋友要花多少路费。他的朋友们都很聪明,永远都会选择一条花费最少的方式到达首都。

花花需要准备晚餐去了,所以他没有时间亲自计算出朋友们将要花费的路费。你可以帮帮他么?

4.2 输入格式

输入的第一行包含两个空格隔开的整数 n 和 m,表示 H 国的城市数量和过路券的种数。之后的 n 1 行各自包含两个数 ai 和 bi,代表城市 ai 到城市 bi 间有一条单向道路。

之后的 m 行每行包括三个整数 vi; ki 和 wi,表示一种过路券。下一行包含一个整数 q,表示花花朋友的数量。

之后的 q 行各自包含一个整数,表示花花朋友的所在城市。

4.3 输出格式

输出共 q 行,每一行代表一位朋友的路费。

对于 100% 的数据:n; m; q  105; wi    10000; 1   vi; ki    n

思路:

 var f,g:array[..,..]of longint;
head,vet,next,hq,vq,nq,lq,dp:array[..]of longint;
n,m,i,tot,tq,x,q,y,v,k,w:longint; procedure add(a,b:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
head[a]:=tot;
end; procedure adq(a,b,c:longint);
begin
inc(tq);
nq[tq]:=hq[a];
vq[tq]:=b;
lq[tq]:=c;
hq[a]:=tq;
end; function min(x,y:longint):Longint;
begin
if x<y then exit(x);
exit(y);
end; function clac(x,y:longint):longint;
var i:longint;
begin
clac:=;
for i:= downto do
if y and (<<i)> then
begin
clac:=min(clac,g[x,i]);
x:=f[x,i];
end;
end; procedure dfs(u,fa:longint);
var e,v,i:longint;
begin
e:=hq[u];
while e<> do
begin
dp[u]:=min(dp[u],lq[e]+clac(u,vq[e]));
e:=nq[e];
end; e:=head[u];
while e<> do
begin
v:=vet[e];
if v<>fa then
begin
f[v,]:=u;
g[v,]:=dp[u];
for i:= to do
begin
f[v,i]:=f[f[v,i-],i-];
g[v,i]:=min(g[v,i-],g[f[v,i-],i-]);
end;
dfs(v,u);
end;
e:=next[e];
end;
end; begin
assign(input,'party.in'); reset(input);
assign(output,'party.out'); rewrite(output);
readln(n,m);
for i:= to n- do
begin
readln(x,y);
add(x,y);
add(y,x);
end;
for i:= to m do
begin
readln(v,k,w);
adq(v,k,w);
end;
for i:= to n do dp[i]:=;
dp[]:=;
dfs(,-);
readln(q);
for i:= to q do
begin
readln(x);
writeln(dp[x]);
end; close(input);
close(output);
end.

最新文章

  1. Visual Studio 2013 Update 3 RTM 正式发布
  2. [Prodinner项目]学习分享_第一部分_Model层
  3. C#语言各种集合介绍
  4. Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
  5. poj 1934(LCS)
  6. HTML-css selector
  7. winserver2008下创建计划任务注意点
  8. 灰色关联度Matlab代码
  9. Hadoop化繁为简-从安装Linux到搭建集群环境
  10. Caused by: java.net.SocketException: Broken pipe
  11. JSON对象转换成JSON字符串
  12. c++学习过程
  13. 尚硅谷面试第一季-16 JVM垃圾回收机制
  14. Unity的几个特殊文件夹
  15. SQL 常用判断语句
  16. github与gitlab与git三个基佬的故事
  17. 转:CocoaPods pod install/pod update更新慢的问题
  18. Linux上如何查看Deb和RPM软件包的更新日志
  19. JDBC—执行sql语句的通用方法
  20. python,java操作mysql数据库,数据引擎设置为myisam时能够插入数据,转为innodb时无法插入数据

热门文章

  1. SQL Server数据库字段类型说明
  2. UI Testing in Xcode 7
  3. 解决vs 编译的bug“请检查是否是磁盘空间不足、路径无效或权限不够”
  4. css文件和js文件后面带一个问号----2015-1103
  5. [CF] 180 E. Cubes
  6. Voyager下的Settings方法
  7. linux关于软件安装和测试
  8. GoF23种设计模式之行为型模式之中介者模式
  9. Python学习笔记:open函数和with临时运行环境(文件操作)
  10. jmeter接口测试 ——学习笔记