[HNOI2011]XOR和路径 题解
设 \(f(x)\) 表示从 \(x\) 节点走到 \(n\) 的期望。有 $$f(x)=\sum_{{x,y}}\frac{f(y)\oplus w(x,y)}{{\rm deg}(x)}$$ 由于有后效性,无法 DP 求得。于是可以将其看作未知数,\(n\) 个点构成 \(n\) 个 \(n\) 元一次方程,解方程即可。
但还是不太好求,考虑期望的线性性,按位处理。
重新记 \(f(x)\) 表示当前位的 \(x\) 走到 \(n\) 异或和为 \(1\) 的概率,有 $${\rm deg}(x)f(x)=\sum_{w(x,y)=1}f(y)+\sum_{w(x,y)=0}\big(1-f(y)\big)$$ 最后的答案为 \(\sum\limits_{t=1}^{32} 2^{t-1}\cdot f(1)\)。
为了消元简便,实际求的过程中我们把方程写成 $$\sum_{w(x,y)=0}f(y)-\sum_{w(x,y)=1}f(y)-{\rm deg}(x)f(x)=-\sum_{w(x,y)=1}1$$
注意自环只用算一次。
别颓废了……抓紧时间……
#include <bits/stdc++.h>
using namespace std;
const int N=105,M=10005;
const double eps=1e-8;
struct Edge{int to,nxt,w;}e[M<<1];
int n,m,cnt,head[N],deg[N];
double ans,a[N][N];
inline void add(int u,int v,int w) {e[++cnt]=(Edge){v,head[u],w};head[u]=cnt;}
void gauss()
{
for(int i=1;i<=n;++i)
{
int t=i;
for(int j=i+1;j<=n;++j)
if(fabs(a[j][i])>fabs(a[t][i])) t=j;
for(int j=i;j<=n+1;++j) swap(a[t][j],a[i][j]);
for(int j=n+1;j>=i;--j) a[i][j]/=a[i][i];
for(int j=1;j<=n;++j)
if(i!=j)
for(int k=n+1;k>=i;--k)
a[j][k]-=a[j][i]*a[i][k];
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1,d,b,c;i<=m;++i)
{
scanf("%d%d%d",&d,&b,&c);
if(d==b)
{
deg[d]++; add(d,b,c);
}
else
{
deg[d]++,deg[b]++;
add(d,b,c); add(b,d,c);
}
}
for(int k=30;~k;--k)
{
memset(a,0,sizeof(a));
for(int u=1;u<n;++u)
{
a[u][u]=-deg[u];
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to,w=(e[i].w>>k)&1;
if(w) a[u][v]-=1,a[u][n+1]-=1;
else a[u][v]+=1;
}
}
a[n][n]=1; gauss();
ans+=(1<<k)*a[1][n+1];
}
printf("%.3lf",ans);
return 0;
}
[HNOI2011]XOR和路径 题解的更多相关文章
- BZOJ2337:[HNOI2011]XOR和路径——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
- BZOJ2337: [HNOI2011]XOR和路径
题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...
- 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元
[BZOJ2337][HNOI2011]XOR和路径 Description 题解:异或的期望不好搞?我们考虑按位拆分一下. 我们设f[i]表示到达i后,还要走过的路径在当前位上的异或值得期望是多少( ...
- BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )
一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...
- BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]
2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...
- [HNOI2011]XOR和路径 && [HNOI2013]游走
[HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...
- 【BZOJ 2337】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1170 Solved: 683 Description ...
- [Wc2011] Xor 和 [HNOI2011]XOR和路径
Xor F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser autoint Logout 捐赠本站 Prob ...
随机推荐
- vue3.0 props
.orange { color: rgba(255, 165, 0, 1) } Vue3.0 props 1.你是否遇到了,引用props数据报错的问题? 在Vue3.0中,采用了proxy,让很多数 ...
- robotframework常用关键字
robotframework关键字 可以将关键字看作是处理数据的方法.robotframework的关键字和测试数据组成了测试用例. robotframework关键字包括系统关键字和用户关键字.用户 ...
- NetCore Dapper封装
一.前期环境准备 1.创建一个core webapi的项目,基于core3.1版本创建一个项目. 2.Dapper安装,使用NuGet来安装Dapper程序包 Install-Package Dapp ...
- Kafka 的这些原理你懂吗
如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的.不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用 ...
- noip模拟7[匹配·回家·寿司]
这次考试状态好像还是没有回来,只拿了55pts,还全是第一题的功劳,就是一个小KMP,然后还让我给打错了 就很难受,while打成了if,然后wa掉45分考完立马拿回来了,悔死了,害 第二题爆零了,为 ...
- csps前小结
冒着题没改完颓废被发现的风险来写博客 好像离csps只剩两天了,然而没啥感觉 最近考试有时考得还算可以,有时也会很炸 今天考试事实上心态啥崩,因为T1结论题一直没思路,想了一个小时连暴力都没打 过了一 ...
- 【模拟8.03】斐波那契(fibonacci) (规律题)
就是找规律,发现每个父亲和孩子的差值都是距儿子最大的fibonacc 也是可证的 f[i]表示当前月的兔子总数 f[i]=f[i-1]+f[i-2](f[i-2]是新生的,f[i-1]是旧有的) 然后 ...
- Spring Boot下的一种导出Excel文件的代码框架
1.前言 在Spring Boot项目中,将数据导出成Excel格式文件是常见的功能.与Excel文件导入类似,此处也用代码框架式的方式实现Excel文件导出,使得代码具有可重用性,并保持导出数据 ...
- 图解 Redis | 不多说了,这就是 RDB 快照
大家好,我是小林. 虽说 Redis 是内存数据库. 但是它为数据的持久化提供了两个技术,分别是「 AOF 日志和 RDB 快照」. 这两种技术都会用各用一个日志文件来记录信息,但是记录的内容是不同的 ...
- 二QT中使用QTimer定时器
QT中的定时器类叫QTimer(5.8以上版本才有),构造函数只需要提供父对象的指针 使用的话,需要调用QTImer的start方法,该方法以毫秒单位,每过指定毫秒时间,该类对象就会发出一个timeo ...