博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)
阅读量:6320 次
发布时间:2019-06-22

本文共 1903 字,大约阅读时间需要 6 分钟。

首先,异或的话直接讨论不好讨论,那么我们可以按位讨论,对于每一位讨论出来一个结果,然后将结果相加就好了。
然后考虑怎么讨论一位上的结果。
我们可以设出来一个dp方程:f(i)表示i到n的异或和期望值,则初始状态为f(n)=0
dp转移方程就是:其中weight(u,v)代表(u,v)的那一位的值
f(v)=(u,v)Ef(u)/degree(v) weight(u,v)=0
f(v)=(u,v)E(1f(u))/degree(v) weight(u,v)=1
则对于每一个i,都会有一个线性方程:
f[i]=f[j1]/degree[i]+(1f[j2])/degree[i]+......
然后预处理出矩阵来,高斯消元即可。
代码:

#include
#include
#include
#include
#define ll long longusing namespace std;inline int read(){ int x=0;char ch=' ';int f=1; while(ch<'0'||ch>'9')ch=getchar(); if(ch=='-'){ f=-1;ch=getchar(); } while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*f;}struct edge{ int to,next,w;}e[20001];int n,m,tot;int head[101];int in[101];double a[101][101];void gauss(){ for(int i=1;i<=n;i++){ int mx=i; while(!a[mx][i])mx++; if(i!=mx)swap(a[i],a[mx]); double mul=a[i][i]; for(int j=i;j<=n+1;j++)a[i][j]/=mul; for(int k=1;k<=n;k++){ if(k!=i&&a[k][i]){ mul=a[k][i]; for(int j=i;j<=n+1;j++){ a[k][j]-=mul*a[i][j]; } } } }}inline void addedge(int x,int y,int l){ e[++tot].to=y;e[tot].next=head[x];e[tot].w=l;head[x]=tot;in[y]++;}int main(){ n=read();m=read(); for(int i=1;i<=m;i++){ int x=read(),y=read(),l=read(); if(x!=y)addedge(x,y,l),addedge(y,x,l); else addedge(x,y,l); } double ans=0; for(int k=0;k<=30;k++){ memset(a,0,sizeof(a)); for(int x=1;x
>k)&1){ a[x][u]+=1.0/in[x];a[x][n+1]+=1.0/in[x]; } else{ a[x][u]-=1.0/in[x]; } } } a[n][n]=1.0; gauss(); ans+=a[1][n+1]*1.0*(1<

转载于:https://www.cnblogs.com/stone41123/p/7581240.html

你可能感兴趣的文章
用委托在listbox中异步显示信息,解决线程间操作无效,从不是创建控件的线程访问它...
查看>>
activity四种启动模式
查看>>
tomcat运行模式APR安装
查看>>
c# winform编程之多线程ui界面资源修改总结篇
查看>>
VBA实现两种方法生成任意概率分布的随机数
查看>>
第三周作业
查看>>
颜色空间转换 cvtColor()[OpenCV 笔记13]
查看>>
Android Runtime.getRuntime().exec
查看>>
计算机系统启动过程
查看>>
Halcon 彩色图片通道分割处理
查看>>
双缓冲绘图
查看>>
该读些啥书
查看>>
扒一扒EOS的前世今生
查看>>
WEB测试—用户界面测试
查看>>
robotframwork的WEB功能测试(一)—切换window窗口
查看>>
命名分组(?<name>....)
查看>>
【转载】python学习之 字符串前'r'的用法
查看>>
5种方法提高你网站的登录体验
查看>>
[转]python的requests发送/上传多个文件
查看>>
在maven项目中使用Junit进行单元测试(一)
查看>>