题目描述:

竹林可以看作是一个n 个点的树,每个边有一个边长i w ,其中有k 个关键点,永琳需
要破坏这些关键点才能走出竹林迷径。
然而永琳打算将这k 个点编号记录下来,然后随机排列,按这个随机的顺序走过k 个点,
但是两点之间她只走最短路线。初始时永琳会施展一次魔法,将自己传送到选定的k 个点中
随机后的第一个点。
现在永琳想知道,她走过路程的期望是多少,答案对998244353 取模。
注意,如果对期望不理解,题目最后有详细解释,请自行阅读。

输入:

第一行一个数Case,表示测试点编号。(样例的编号表示其满足第Case 个测试点的性
质)
下一行一个n,表示树的点数。
下面n-1 行,每行三个数i i i u,v,w ,表示一条边连接i i i u 和v,长度为w 。
下面一行一个数k,表示关键点数。
下面一行k 个数,表示k 个关键点的编号。

输出:

一行一个数,表示答案(对998244353 取模)。

数据范围:

对于100%的数据,保证 1≤ w ≤10 ,1≤N≤1e6,1≤K≤1e6

算法标签:DFS???概率期望

思路:

考虑对于每一条边对于答案会造成的贡献,当存在某两个选中的点在边的两边即存在情况使这条边出现次数++,根据这个思路退式子即可。

考差的不走心题解,式子都不给了

以下代码:

#include<bits/stdc++.h>
#define il inline
#define LL long long
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
const int N=1e6+5,p=998244353;
int n,head[N],ne[N<<1],to[N<<1],v[N<<1],cnt,k,w[N],s[N];LL ans,base;
il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;}
il void insert(int x,int y,int z){ne[++cnt]=head[x];head[x]=cnt;to[cnt]=y;v[cnt]=z;}
il LL ksm(LL a,int y){LL b=1;while(y){if(y&1)b=b*a%p;a=a*a%p;y>>=1;}return b;}
void dfs(int x,int fa){if(w[x])s[x]++;for(int i=head[x];i;i=ne[i]){if(fa==to[i])continue;dfs(to[i],x);s[x]+=s[to[i]];ans=(ans+(LL)s[to[i]]*(LL)(k-s[to[i]])%p*(LL)v[i]%p)%p;}
}
int main()
{//freopen("path.in","r",stdin);//freopen("path.in","w",stdout);read();n=read();for(int i=1;i<n;i++){int x=read(),y=read(),z=read();insert(x,y,z);insert(y,x,z);}k=read();for(int i=1;i<=k;i++)w[read()]=1;cnt=0;dfs(1,0);base=2ll*(LL)ksm((LL)k,p-2)%p;printf("%lld\n",ans*base%p);return 0;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/9882462.html

2018.10.31-dtoj-4015-永琳的竹林迷径(path)相关推荐

  1. DTOJ 4015: 永琳的竹林迷径

    401540154015: 永琳的竹林迷径 题目描述 竹林可以看作是一个nnn 个点的树,每个边有一个边长wiw_{i}wi​,其中有kkk 个关键点,永琳需要破坏这些关键点才能走出竹林迷径. 然而永 ...

  2. 永琳的竹林迷径(path)

    永琳的竹林迷径(path) 题目描述 竹林可以看作是一个n 个点的树,每个边有一个边长wi,其中有k 个关键点,永琳需要破坏这些关键点才能走出竹林迷径. 然而永琳打算将这k 个点编号记录下来,然后随机 ...

  3. ssoj4015: 永琳的竹林迷径(path)

    时间限制: 2 Sec 内存限制: 512 MB O2 提交: 61 解决: 31 [提交][状态][博客][加入收藏] 题目描述 竹林可以看作是一个n 个点的树,每个边有一个边长wi,其中有k 个关 ...

  4. Noip 模拟 13 2018/10/31

    T1:铃仙的红色之瞳(eyes) 为了方便你的预测,铃仙对该符卡进行了改造. 敌方非常强大,可以看作有无限的体力.通过该符卡,铃仙可以释放出子弹,敌方触碰到子弹就会损失一格体力.注意,每次敌方损失体力 ...

  5. 训练日志 2018.10.31

    上周把图的连通性看完了,也做了些有关的题. 图的遍历内容的欧拉回路 Fleury 算法还不太熟练,哈密尔顿回路还没开始,这周争取把图的遍历以及拓扑排序看完,再做些题. 2018.10.31

  6. 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31

    10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31 1. 第4次周计划概览 2. 今日学习成果 3. 今日时间表 4. 今日反思 5. ...

  7. 2018.10.31模拟赛

    T1 lgg L 君和 G 君在玩一个游戏.G 君写下一个字符串 A,L 君将其复制一遍连接到 A 串后面得 到字符串 B, G 君又在 B 的任意位置(包括首尾)插入一个字符得到字符串 C.现在你得 ...

  8. ssl提高组周三备考赛【2018.10.31】

    前言 呆学校呆3天依旧不想复习期中,感觉要凉. 成绩 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 111 2017mysel ...

  9. P2628 冒险岛 AC于2018.10.31

    原题 题目背景 冒险岛是费老师新开发的一种情景模拟电脑的游戏,通过掷骰子(1~6个数字之间),让一种人物(棋子)在棋纸上从左至右的行走,从而模拟冒险的故事-- 题目描述 棋纸上有一条从左至右的很长的路 ...

最新文章

  1. Mac终端显示 bogon的问题
  2. cocos2d js调用java_【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法...
  3. asp:UpdatePanel中使用下拉时不得不注意的问题
  4. 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”
  5. ACM中Java使用总结
  6. oracle查出连续5行,Oracle期末考试复习题2
  7. (76)译码器与编码器(三八译码器)
  8. adb ps shell 查看进程,如何使用ADB命令检测正在运行的应用程序
  9. transient是干嘛的
  10. Hadoop集群搭建及配置⑥ —— Hadoop组件安装及配置
  11. 敏捷开发 角色英文简称
  12. PxCook 点击设计稿即可生成代码前端,高效智能的设计研发工具,智能标注软件。...
  13. 疑问代词who和whom的用法
  14. 谢烟客---------Linux之深入理解anaconda使用
  15. 三百英雄服务器维护2020,【梦服】2020年12月3日【版本更新说明】
  16. BGA封装焊盘的过孔设计
  17. Eclipse插件开发JDT组件介绍
  18. C不会断句?【前后置,位,移位操作符详解】 b = ++c, c++, ++a, a++
  19. google vr 入门之VrPanoramaView制作全景图列表,apm应用性能管理
  20. 短信验证码常见漏洞总结

热门文章

  1. matlab如何形成exe,matlab生成exe独立运行包
  2. mybatis-sqlserver批量新增返回id
  3. SpringBoot《第二课》
  4. java web聊天室论文_基于javaweb聊天室.doc
  5. scrapy抓斗鱼主播的图片
  6. tableau-客户留存分析模型
  7. 堡塔APP 免费使用教程【图文教程】
  8. CENTOS5.5下使用Roundcube搭建 Webmail
  9. 雷军造车,没有“捷径”
  10. The Complete Guide To Rooting Any Android Phone