题意:

花花住在 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.

【NOIP2016练习】T2 花花的聚会 (树形DP,倍增)的更多相关文章

  1. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

  2. Codeforces 418d Big Problems for Organizers [树形dp][倍增lca]

    题意: 给你一棵有n个节点的树,树的边权都是1. 有m次询问,每次询问输出树上所有节点离其较近结点距离的最大值. 思路: 1.首先是按照常规树形dp的思路维护一个子树节点中距离该点的最大值son_di ...

  3. 【NOIP2016练习】T3 tree (树形DP)

    题意:一棵有N个结点的树,每个节点上有权值c[i] 需要选出若干结点,对于任意结点他的所有祖先都被选取且选取总个数不能超过lim 在此前提下使权值和最大 n,lim<=3000 思路:WA了1次 ...

  4. [NOIP2018]保卫王国(树形dp+倍增)

    我的倍增解法吊打动态 \(dp\) 全局平衡二叉树没学过 先讲 \(NOIP\) 范围内的倍增解法. 我们先考虑只有一个点取/不取怎么做. \(f[x][0/1]\) 表示取/不取 \(x\) 后,\ ...

  5. hdu 4123(树形dp+倍增)

    Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. hdu5449 Robot Dog (树形dp+倍增lca)

    (警告:本篇博客包含大量人类本质内容) 先处理出来lca,然后就只需要知道从每个点到他的父亲.和从他的父亲到这个点的期望时间就可以了 我们设f[x]为x到他父亲的期望时间:g[x]为从x的父亲到x的期 ...

  7. 【2019.8.20 NOIP模拟赛 T2】小B的树(tree)(树形DP)

    树形\(DP\) 考虑设\(f_{i,j,k}\)表示在\(i\)的子树内,从\(i\)向下的最长链长度为\(j\),\(i\)子树内直径长度为\(k\)的概率. 然后我们就能发现这个东西直接转移是几 ...

  8. 【2019.7.15 NOIP模拟赛 T2】与非树(nand)(树形DP)

    树形\(DP\) 实际上,这道题应该不是很难. 我们设\(f_{x,i,j}\)表示在以\(x\)为根的子树内,原本应输出\(i\),结果输出了\(j\)的情况数. 转移时,为了方便,我们先考虑与,再 ...

  9. 【NOIP2016提高A组集训第14场11.12】随机游走——期望+树形DP

    好久没有写过题解了--现在感觉以前的题解弱爆了,还有这么多访问量-- 没有考虑别人的感受,没有放描述.代码,题解也写得歪歪扭扭. 并且我要强烈谴责某些写题解的代码不打注释的人,像天书那样,不是写给普通 ...

随机推荐

  1. 字符串 -----JavaScript

    本文摘要:http://www.liaoxuefeng.com/ JavaScript的字符串就是用''或""括起来的字符表示. 如果'本身也是一个字符,那就可以用"&q ...

  2. C#传递数组参数

    在C#中,可以将数组作为参数传递给方法,同时方法可以更改数组元素的值. 一.将一维数组作为参数传递给方法 using System;using System.Collections.Generic;u ...

  3. lua调用java过程

    在cocos2dx框架中,有继承好的luaj文件来方便我们去使用lua调用java底层代码,注意:luaj只能使用在安卓平台下,如果在平台下使用,会出错, 所以使用前需要加平台判断,方法 如下: lo ...

  4. token_get_all()函数

    token_get_all (PHP 4 >= 4.2.0, PHP 5) token_get_all — 将提供的源码按 PHP 标记进行分割,可以用作php源代码的压缩,会按照固定的分解方法 ...

  5. 笔记--Day2--python基础2

    一.鸡汤 1.提高自我修养 2.人丑就要多读书 3.多走走,开拓眼界 二.目录: 1.列表.元组操作 2.字符串操作 3.字典操作 dict是无序的 key必须是唯一的 4.集合操作 集合是一个无序的 ...

  6. Livid : 在 26 岁时写给 18 岁的自己

    转载自: https://livid.v2ex.com/essays/2012/01/24/a-letter-from-26-to-18.html 在 26 岁时写给 18 岁的自己 Jan 24, ...

  7. strace用法

    strace   --  trace system calls and signals     strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信 ...

  8. LeetCode(215) Kth Largest Element in an Array

    题目 Find the kth largest element in an unsorted array. Note that it is the kth largest element in the ...

  9. 【HIHOCODER 1182】欧拉路·三

    描述 小Hi和小Ho破解了一道又一道难题,终于来到了最后一关.只要打开眼前的宝箱就可以通关这个游戏了. 宝箱被一种奇怪的机关锁住: 这个机关是一个圆环,一共有2^N个区域,每个区域都可以改变颜色,在黑 ...

  10. CodeForces - 948C Producing Snow(优先队列)

    题意: n天. 每天你会堆一堆雪,体积为 v[i].每天都有一个温度 t[i] 所有之前堆过的雪在第 i 天体积都会减少 t[i] . 输出每天融化了的雪的体积. 这个题的正解我怎么想都很难理解,但是 ...