有人说这题像游走...

关于游走的思想,他死了...

明明直接从期望dp的角度考虑更简单合理嘛

首先由于是异或运算不妨逐位考虑

对于每一位,设状态$f[i]$表示从第$i$个点到第$n$个点,这一位上是$1$的概率

那么我们按边权讨论转移:

若这条边边权为$1$:$f[i]+=\frac{1-f[to]}{deg_{i}}$

若这条边边权为$0$:$f[i]+=\frac{f[to]}{deg_{i}}$

可是本题转移是成环的,因此直接dp是行不通的

但是我们可以考虑高斯消元嘛!

上面那个表达式很显然是个方程组,高斯消元解之即可!

整理一下,就得到了:$deg_{i}f[i]+[v_{i,to}==1]f[to]-[v_{i,to}==0]f[to]=\sum_{v_{i,to}==1}1$

(其实就是整合一下上面两个表达式,移个项就出来了)

算出$f[1]$乘贡献即可

(所以这题根本不需要基于点考虑边,只需要考虑点就可以了!不用研究边的期望!)

贴代码:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
using namespace std;
double eps=1e-8;
struct Edge
{
int nxt;
int to;
int val;
}edge[20005];
int head[105];
double inr[105];
double a[105][105];
int n,m,cnt=1;
double ans=0;
void add(int l,int r,int w)
{
edge[cnt].nxt=head[l];
edge[cnt].to=r;
edge[cnt].val=w;
head[l]=cnt++;
inr[l]++;
}
void Gauss()
{
for(int i=1;i<=n;i++)
{
int temp=i;
while(fabs(a[temp][i])<=eps)temp++;
if(temp!=i)for(int j=i;j<=n;j++)swap(a[i][j],a[temp][j]);
double now=a[i][i];
for(int j=i;j<=n+1;j++)a[i][j]/=now;
for(int j=i+1;j<=n;j++)
{
if(fabs(a[j][i])<=eps)continue;
now=a[j][i];
for(int k=i;k<=n+1;k++)a[j][k]-=now*a[i][k];
}
}
for(int i=n;i>=1;i--)for(int j=i-1;j>=1;j--)a[j][n+1]-=a[i][n+1]*a[j][i];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
if(x!=y)add(y,x,z);
}
for(int k=0;k<=30;k++)
{
memset(a,0,sizeof(a));
for(int i=1;i<=n-1;i++)
{
a[i][i]=inr[i];
for(int j=head[i];j;j=edge[j].nxt)
{
int to=edge[j].to;
if(edge[j].val&(1<<k))a[i][to]+=1.0,a[i][n+1]+=1.0;
else a[i][to]-=1.0;
}
}
a[n][n]=1;
Gauss();
ans+=a[1][n+1]*(1<<k);
}
printf("%.3lf\n",ans);
return 0;
}

最新文章

  1. mysql分表和表分区详解
  2. 分享一个jquery写的类似于百度的搜索框,(可动态配置,可单列或者table格式,可填充数据)
  3. 配置github上的SSH key及上传自己的项目到github
  4. NoSQL--非关系型的数据库是什么?
  5. Django提供后台接口的跨域问题
  6. RSA加密解密操作
  7. Android 2014年1月22日
  8. 使用C#开发Metro 风格应用的路线图 -- 触屏操作
  9. NPOI 创建Excel,数据读取与写入
  10. [HAOI2008]硬币购物
  11. BZOJ_3223: Tyvj 1729 文艺平衡树 _splay
  12. 算法第四版中 while (!StdIn.isEmpty()) 循环无法跳出问题
  13. Web版需求征集系统所得2,servlet中request.getParameter获值乱码问题解决
  14. Centos7 systemctl服务脚本
  15. docker介绍
  16. W10激活
  17. linux之目录知识
  18. STL中erase()的用法
  19. C# base和this的用法
  20. CF 1114 D. Flood Fill

热门文章

  1. 第四章:用Python对用户的评论数据进行情感倾向分析
  2. notepad++解决粘贴复制代码行数问题
  3. 24_webpack_打包分析
  4. iOS Programing
  5. 遇到bug怎么分析,这篇文章值得一看
  6. windwos 系统打补丁后重启不了处理方案
  7. C#中DataTable新增列、删除列、更改列名、交换列位置
  8. WPF textbox实现单击全选
  9. [NOIP1999 提高组] 旅行家的预算
  10. tp5上传图片常规