Description

注意测试数据中道路是

的单向道路,与题面恰好相反。

Input

Output

Sample Input

7 7
1 3
1 2
6 7
3 6
3 5
3 4
7 2 3
7 1 1
2 3 5
3 6 2
4 2 4
5 3 10
6 1 20
3
5
6
7

Sample Output

题解:

  这个题目,首先dp十分显然,设dp[i]表示强制在i这个节点购买的走到1号节点的最小话花费转移起来就可以了.

  但显然我们要求可以用这个票到达的祖先节点中dp[x]的最小值,考虑,将票按起点的dfn排序,每次用票来更新dp值,每次更新就在线段树里修改就可以了,线段树维护区间极小值.

代码:

  

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <iostream>
  7. #include <vector>
  8. #define MAXN 100010
  9. #define ll long long
  10. using namespace std;
  11. int n,m,q;
  12. int fa[MAXN],dep[MAXN],dfn[MAXN],sz[MAXN],top[MAXN],son[MAXN],id[MAXN];
  13. ll dp[MAXN];
  14. struct edge{
  15. int first;
  16. int next;
  17. int to;
  18. }a[MAXN*];
  19. struct piao{
  20. int x,ti,co;
  21. void read(){
  22. scanf("%d%d%d",&x,&ti,&co);
  23. }
  24. }g[MAXN];
  25. struct tree{
  26. int l,r;ll minn;
  27. }tr[MAXN*];
  28. int num=;
  29.  
  30. void addedge(int from,int to){
  31. a[++num].to=to;
  32. a[num].next=a[from].first;
  33. a[from].first=num;
  34. }
  35.  
  36. void dfs1(int now,int f){
  37. fa[now]=f,sz[now]=,dep[now]=dep[f]+;
  38. for(int i=a[now].first;i;i=a[i].next){
  39. int to=a[i].to;
  40. if(to==f) continue;
  41. dfs1(to,now);
  42. sz[now]+=sz[to];
  43. if(sz[son[now]]<sz[to]) son[now]=to;
  44. }
  45. }
  46.  
  47. void dfs2(int now,int tp){
  48. top[now]=tp;
  49. dfn[now]=++num;id[dfn[now]]=now;
  50. if(son[now]) dfs2(son[now],tp);
  51. for(int i=a[now].first;i;i=a[i].next){
  52. int to=a[i].to;
  53. if(to==fa[now]||to==son[now]) continue;
  54. dfs2(to,to);
  55. }
  56. }
  57.  
  58. void pushup(int xv){
  59. tr[xv].minn=min(tr[xv*].minn,tr[xv*+].minn);
  60. }
  61.  
  62. void build(int xv,int l,int r){
  63. if(l==r){
  64. tr[xv].l=l,tr[xv].r=r;
  65. tr[xv].minn=1ll<<;
  66. return;
  67. }
  68. tr[xv].l=l,tr[xv].r=r;int mid=(l+r)>>;
  69. build(xv*,l,mid),build(xv*+,mid+,r);
  70. pushup(xv);
  71. }
  72.  
  73. bool cmp(piao x,piao y){
  74. return dfn[x.x]<dfn[y.x];
  75. }
  76.  
  77. void insert(int xv,int ps,int x){
  78. int l=tr[xv].l,r=tr[xv].r,mid=(l+r)>>;
  79. if(l==r){
  80. tr[xv].minn=x;return;
  81. }
  82. if(ps<=mid) insert(xv*,ps,x);else insert(xv*+,ps,x);
  83. pushup(xv);
  84. }
  85.  
  86. ll query(int xv,int l,int r){
  87. int L=tr[xv].l,R=tr[xv].r,mid=(L+R)/;
  88. if(l==L&&r==R) return tr[xv].minn;
  89. if(r<=mid) return query(xv*,l,r);
  90. else if(l>mid) return query(xv*+,l,r);
  91. else return min(query(xv*,l,mid),query(xv*+,mid+,r));
  92. }
  93.  
  94. ll getminn(int x,int ti){
  95. ll now=x,ret=dp[MAXN-];
  96. while(dep[x]-dep[top[now]]<=ti&&top[now]&&now!=){
  97. ret=min(ret,query(,dfn[top[now]],dfn[now]));
  98. now=fa[top[now]];
  99. }
  100. if(now==||dep[x]-dep[now]>ti) return ret;
  101. int l=dfn[top[now]],r=dfn[now],mid=(l+r)>>,ans=r;
  102. while(l<=r){
  103. int mid=(l+r)/;
  104. if(dep[x]-dep[id[mid]]<=ti) ans=mid,r=mid-;
  105. else l=mid+;
  106. }
  107. ret=min(ret,query(,ans,dfn[now]));
  108. return ret;
  109. }
  110.  
  111. int main()
  112. {
  113. cin>>n>>m;
  114. for(int i=;i<n;i++){
  115. int x,y;scanf("%d%d",&x,&y);
  116. addedge(y,x);
  117. addedge(x,y);
  118. }
  119. dfs1(,);num=;
  120. dfs2(,);
  121. build(,,n);
  122. for(int i=;i<=m;i++) g[i].read();
  123. sort(g+,g+m+,cmp);
  124. memset(dp,,sizeof(dp));dp[]=;
  125. insert(,,);
  126. for(int i=;i<=m;i++){
  127. int co=g[i].co,ti=g[i].ti,x=g[i].x;
  128. if(x==) continue;
  129. ll xx=getminn(x,ti);
  130. ll ret=getminn(x,ti)+co;
  131. dp[x]=min(dp[x],ret);
  132. insert(,dfn[x],dp[x]);
  133. }
  134. cin>>q;
  135. while(q--){
  136. int x;scanf("%d",&x);
  137. printf("%lld\n",dp[x]);
  138. }
  139. return ;
  140. }

【JZOJ5248】花花的聚会的更多相关文章

  1. 【NOIP2016练习】T2 花花的聚会 (树形DP,倍增)

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

  2. BSD和云 – 不可错过的BSD聚会

    自2012年开始,微软云计算与企业事业部和Citrix思杰,NetApp达成合作,共同开发出第一版针对Hyper-V虚拟设备驱动以及相关的用户态程序,并将此称之为集成服务 (Integration S ...

  3. 【BZOJ-1787&1832】Meet紧急集合&聚会 倍增LCA

    1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 2259  Solved: 1023[Submit] ...

  4. bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)

    题目链接: 3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MB Description 有N个小松鼠,它们的家用一个点x,y表 ...

  5. DHV 平常语言对话 一次聚会离场

    一次聚会离场 一次聚会离场,如果顺路要计划好A女生 和B女生 或者C女闺密一起回去,然后再自己回去 如果别人说:好男人, 自己一定要谦虚说: 哪里,好男人一般都是备胎. 到家了要说: 不是说: 我:我 ...

  6. BZOJ3170: [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 531  Solved: 249[Submit][Statu ...

  7. bzoj1832: [AHOI2008]聚会

    写过的题... #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...

  8. BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  9. tyvj1161聚会的名单(trie树)

    背景 Background 明天就是candy的生日,candy又会邀请自己的一大堆好友来聚会了!哎!又要累坏飘飘乎居士了!! 描述 Description     明天就是candy的生日.晚上,c ...

随机推荐

  1. IDEA中全局搜索不起作用,解决办法

    众所周知IDEA中全局搜索的快捷键是Ctrl+Shift+F,但是今天却碰到了用不了的情况,其实软件坏了的可能性很小,那就要从外部再来找原因,查看自己开的软件,一一查看快捷键,看是否是快捷键冲突: 1 ...

  2. sql 行列互转

    1.行转列 现有数据: 期望数据: 1.1建表建数据 IF OBJECT_ID('temp_20170701','u') IS NOT NULL DROP TABLE temp_20170701 CR ...

  3. JSP静态include和动态include的区别

    静态include是指令元素.include指令的语法格式:<%@ include file="filename" %>.include指令的作用是在JSP页面中静态包 ...

  4. airflow使用本地时区

    ​ 在airflow中使用的时间是utc时间,而更多时候我们希望的是使用本地时间,于是在定义airflow定时任务的时候,涉及到了时间的转换. 1.python中本地时间和utc时间的转换 查看国内可 ...

  5. STL中的unique和unique_copy函数

    一.unique函数 这个函数的功能就是删除相邻的重复元素,然后重新排列输入范围内的元素,并返回一个最后一个无重复值的迭代器(并不改变容器长度). 例如: vector<); ; i < ...

  6. Egiht(八种方法)

    Problem Description The 15-puzzle has been around for over 100 years; even if you don't know it by t ...

  7. DOM盒子模型常用属性client,offset和scroll

    JS盒子模型属性 在JS中通过相关的属性可以获取(设置)元素的样式信息,这些属性就是盒子模型属性(基本上都是有关于样式的) 属性 值 client top/left/width/height offs ...

  8. [Linux] Vmware 15安装CentOs后显示网络不可用

    转载自:https://blog.csdn.net/chenjin_chenjin/article/details/83617186 在虚拟机上安装好centos7后,ping www.baidu.c ...

  9. 记一次Burp Suite的使用实例

       下载完的Bur是这样的,双击jar即可 最右边的键一直按,傻瓜式         先将要抓包的网页打开,此次以上传图片为例     第一步当然是先下载Burp Suite之后打开,查看设置代理地 ...

  10. 性能测试之 Gatling

    在应用程序上线之前,有多少人做过性能测试? 估计大部分开发者更多地关注功能测试,并且会提供一些单元测试和集成测试的用例.然而,有时候性能漏洞导致的影响比未发现的业务漏洞更严重,因为性能漏洞影响的是整个 ...