Description


梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择一条走过去, 为了确保第二天能够准时到校, 你要求出每个梦期望经过多少条边才能苏 醒. 为了避免精度误差, 你要输出答案模10^9 + 7的结果.

对于 20%的数据, N <= 10.
对于 40%的数据, N <= 1000.
另有 20%的数据, 保证给定的树是一条链.
对于 100%的数据, N <= 100000, Q <= 100000.

Solution


树形dp,同这个
然后求个lca算一下就行了

Code


#include <stdio.h>
#include <string.h>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)const int N=200005;
const int E=400005;struct edge {int y,w,next;} e[E];int ls[N],hate[N],edCnt;
int rc[500][500];bool vis[N];long long ans;int read() {int x=0,v=1; char ch=getchar();for (;ch<'0'||ch>'9';v=(ch=='-')?(-1):(v),ch=getchar());for (;ch<='9'&&ch>='0';x=x*10+ch-'0',ch=getchar());return x*v;
}void add_edge(int x,int y,int w) {e[++edCnt]=(edge) {y,w,ls[x]}; ls[x]=edCnt;e[++edCnt]=(edge) {x,w,ls[y]}; ls[y]=edCnt;
}void dfs2(int now,int fa,int sum) {if (vis[hate[now]]) return ;ans+=sum;for (int i=ls[now];i;i=e[i].next) {if (e[i].y==fa) continue;vis[e[i].y]=1;dfs2(e[i].y,now,rc[sum][e[i].w]);vis[e[i].y]=0;}
}void dfs1(int now,int fa) {vis[now]=1; //st=now;dfs2(now,0,0);vis[now]=0;for (int i=ls[now];i;i=e[i].next) {if (e[i].y==fa) continue;dfs1(e[i].y,now);}
}int main(void) {freopen("xor.in","r",stdin);freopen("xor.out","w",stdout);char ch=getchar();int k=read();rep(i,0,k-1) rep(j,0,k-1) rc[i][j]=read();int n=read();rep(i,2,n) {int x=read(),y=read(),w=read();add_edge(x,y,w);}rep(i,1,n) hate[i]=read();dfs1(1,0);printf("%lld\n", ans);return 0;
}

jzoj5814 [NOIP提高A组模拟2018.8.14] 树 树形dp相关推荐

  1. 5814. 【NOIP提高A组模拟2018.8.14】 树(期望 + 倍增)

    5814. [NOIP提高A组模拟2018.8.14] 树 Problem 给定一棵nnn个点的树,m" role="presentation">mmm次询问,每次 ...

  2. JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树

    梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

  3. jzoj5814 【NOIP提高A组模拟2018.8.14】 树 (树上期望,递归法列方程)

    题面 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择一条 ...

  4. JZOJ5814. 【NOIP提高A组模拟2018.8.14】 树

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

  5. 5814. 【NOIP提高A组模拟2018.8.14】 树

    题目描述 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择 ...

  6. jzoj 5814. 【NOIP提高A组模拟2018.8.14】 树(期望)

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

  7. jzoj 5814. 【NOIP提高A组模拟2018.8.14】树 dp+lca

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

  8. JZOJ 5820. 【NOIP提高A组模拟2018.8.16】 非法输入

    Description 在算法竞赛中,题目一般保证了输入数据的合法性.然而在工程开发中,我们往往不期望程 序得到的输入都是合法的. D 君正忙着向校内 OJ 添加题目,在写了第 233 个 val.c ...

  9. 5817. 【NOIP提高A组模拟2018.8.15】 抄代码

    Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...

最新文章

  1. 【福利贴】拿去!1024凑个整!
  2. 二叉查找树Java实现代码
  3. 知识图谱学习笔记-非结构化数据处理
  4. ASA SSL ××× Anyconnect SBL(Start Before Logon)用于在外网登录域(上)
  5. 招聘 | 南京柯基数据招聘自然语言处理工程师
  6. Session对象的集合
  7. 如何安装zabbix_get
  8. visual studio 2015提示IE10未安装
  9. HADOOP综合应用架构之一 配置Secondarynamenode在另一台机器运行
  10. Traefik-kubernetes 初试
  11. 1000并发的系统服务器配置,1000并发服务器配置
  12. 如何在Microsoft Excel电子表格之间交叉引用单元格
  13. 微信小程序点击事件失效
  14. 瑞吉外卖项目day01
  15. 水电设计院信息管理系统1.0
  16. js数组操作(push,pop,shift,unshift,slice,splice,concat,sort)
  17. Web网页设计——“说旅游”
  18. 在无网络的环境下使用模拟器
  19. 计算机高级工考试题库2018,080720 自考软件工程:07163高级数据库技术历年真题及答案 2018年 2017年 2019年真题和答案...
  20. 新代系统怎样看服务器ip,新代系统FTP联网教程

热门文章

  1. mysql 中的case when 和ifnull判断
  2. 河南味道的代表——程校长山药胡辣汤
  3. Python自动化开发基础 分布式监控系统开发实战 day8-李杰-专题视频课程
  4. 人工智能的时代即将来临~老前辈告诉你ai创业需谨慎
  5. 深度学习:AlexNet实现服装分类(Pytorch)
  6. 按键添加震动功能。设置-》应用和通知-》通知-》高级-》勿扰模式立即开启按钮放置界面首行。
  7. 享学课堂python基础学习day16之类和对象
  8. XLNet: Generalized Autoregressive Pretraining for Language Understanding翻译
  9. jieba分词中所有词性对应字母符号显示(词性列表及符号表示)
  10. nmon结果说明及分析