CodeForces
来源:互联网 发布:linux jdk 降级 编辑:程序博客网 时间:2024/06/18 17:08
题目链接:http://codeforces.com/problemset/problem/839/C
题目大意:从根出发往下走,每到一个分叉有不同的选择,求最后走过的路径的期望
解题思路:Dfs时候记录下每个分叉口的概率,然后走到最后的时候乘上去
AC代码:
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;const int MAXN = 100000 + 5;struct Edge { int v, next; Edge(int v=0,int next=0):v(v),next(next){}}edge[MAXN << 1];int tot = 0;double arr[MAXN];int edgenum = 0,head[MAXN];void toAdd(int u,int v){ edge[edgenum] = Edge(v, head[u]); head[u] = edgenum++;}void Dfs(int u,int fa,int tier,double rate){ bool flag = 0; int num = 0; for (int i = head[u];i != -1;i = edge[i].next) { int v = edge[i].v; if (v == fa) continue; flag = 1; num++; } if (!flag) { arr[tot++] = tier*rate; return; } for (int i = head[u];i != -1;i = edge[i].next) { int v = edge[i].v; if (v == fa) continue; Dfs(v, u, tier + 1, rate / num); }}int main(){ int n; scanf("%d", &n); memset(head, -1, sizeof(head)); for (int i = 1;i <= n - 1;++i) { int u, v; scanf("%d%d", &u, &v); toAdd(u, v); toAdd(v, u); } Dfs(1, 1, 0, 1); double sum = 0; for (int i = 0;i < tot;++i) sum += arr[i]; printf("%.9f\n", sum); return 0;}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- JAVA学习笔记_真假分页查询
- Java后端1年经验和技术总结(转载他人)
- Python基础03 注释
- Java递归
- POJ 1459 Power Network(网络流)
- CodeForces
- Scrapy框架小例入门
- Ubuntu 1404设置静态IP
- HDU 畅通工程
- Python基础04 运算符
- css中文本元素字体格式(Font-family)的编码
- Quartz定时调度器03
- spring bean的加载过程
- eclipse 上操作git