P3211 [HNOI2011]XOR和路径
2024-08-29 19:35:42
思路
看到异或,容易联想到二进制位之间是相互独立的,所以可以把问题变成每个二进制位为1的概率再乘上(1<<pos)的值
假设现在考虑到pos位,设f[i]为第i个节点期望的异或和第pos位是1的概率,有这样的转移方程
\[f[u]=\frac{1}{d[u]}\sum_{v}[w[i]_{pos}=1]?(1-f[v]):f[v]
\]
\]
这是一个逆推的方程,所以f[n]=0,f[1]就是答案
然后这个方程互相依赖,所以上高斯消元求解即可
代码
注意有点卡精度,换成long double可AC
另外自环不能加两次
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define double long double
using namespace std;
const double eps = 1e-9;
int n,m,u[20100],v[20100],w[20100],fir[110],nxt[20100],cnt,d[110];
double a[110][110],ans;
void addedge(int ui,int vi,int wi){
++cnt;
u[cnt]=ui;
v[cnt]=vi;
w[cnt]=wi;
nxt[cnt]=fir[ui];
fir[ui]=cnt;
}
double gauss(void){
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
if(fabs(a[j][i])>eps){
for(int k=1;k<=n+1;k++)
swap(a[i][k],a[j][k]);
// break;
}
}
for(int j=1;j<=n;j++){
if(i==j)
continue;
double rates=a[j][i]/a[i][i];
for(int k=i;k<=n+1;k++)
a[j][k]=a[j][k]-rates*a[i][k];
}
}
return a[1][n+1]/a[1][1];
}
void make(int pos){
memset(a,0,sizeof(a));
a[n][n]=1;
for(int i=1;i<=n-1;i++){
a[i][i]+=d[i];
for(int j=fir[i];j;j=nxt[j]){
if((w[j]>>pos)&1){
a[i][v[j]]+=1;
a[i][n+1]+=1;
}
else{
a[i][v[j]]-=1;
}
}
}
double mid=gauss();
// printf("mid=%lf\n",mid);
ans=(ans+(1<<pos)*mid);
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
addedge(a,b,c),d[a]++;
if(a!=b)
addedge(b,a,c),d[b]++;
}
for(int i=0;i<32;i++){
make(i);
}
printf("%.3Lf\n",ans);
return 0;
}
最新文章
- xss其他标签下的js用法总结大全
- C#~异步编程再续~await与async引起的w3wp.exe崩溃
- Redis中的客户端redis-cli 命令总结
- Atom 如何隐藏 .Ds_Store 文件
- 脚本工具: 查看当前系统被写入的FD
- Linux内核分析之扒开系统调用的三层皮(下)
- JavaWeb chapter 8 过滤器
- ios 开发之 Xcode6 No valid signing identities (i.e. certificate and private key pair) matching...
- RequireJS加载ArcGIS API for JavaScript
- Centos环境下部署游戏服务器-权限
- init: sys_prop: permission denied uid:1003 name:service.bootanim.exit
- Computer Vision Algorithm Implementations
- centos7.0 php-fpm 安装ImageMagic php扩展imagick
- SO_REUSEADDR 套接字选项应用
- Nodejs+Grunt配置SASS项目自动编译
- python 内存数据库与远程服务
- Spark Streaming + Flume整合官网文档阅读及运行示例
- jq监听input-val变化事件
- 一起学Android之ListView
- Linux三剑客之awk命令