BZOJ2337: [HNOI2011]XOR和路径(期望 高斯消元)
题意
Sol
期望的线性性对xor运算是不成立的,但是我们可以每位分开算
设\(f[i]\)表示从\(i\)到\(n\)边权为1的概率,统计答案的时候乘一下权值
转移方程为
\]
高斯消元解一下
注意:f[n] = 0,有重边!
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
inline int read() {
int x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, M, deg[MAXN];
vector<int> a[MAXN][MAXN];
double f[MAXN][MAXN];
void Gauss() {
for(int i = 1; i <= N - 1; i++) {
int mx = i;
for(int j = i + 1; j <= N; j++) if(f[j][i] > f[mx][i]) mx = j;
if(mx != i) swap(f[i], f[mx]);
for(int j = 1; j <= N; j++) {
if(i == j) continue;
double p = f[j][i] / f[i][i];
for(int k = i; k <= N + 1; k++) f[j][k] -= f[i][k] * p;
}
}
for(int i = 1; i <= N; i++) f[i][N + 1] /= f[i][i];
}
int main() {
//freopen("2.in", "r", stdin);
N = read(); M = read();
for(int i = 1; i <= M; i++) {
int x = read(), y = read(), z = read();
a[x][y].push_back(z);
deg[x]++;
if(x != y) deg[y]++, a[y][x].push_back(z);
}
double ans = 0;
for(int B = 0; B <= 31; B++) {
memset(f, 0, sizeof(f));
for(int i = 1; i <= N - 1; i++) {
f[i][i] = deg[i];
for(int j = 1; j <= N; j++) {
for(int k = 0; k < a[i][j].size(); k++) {
int w = a[i][j][k];
if(w & (1 << B)) {//
f[i][N + 1]++;
if(j != N) f[i][j]++;
} else {
if(j != N) f[i][j]--;
}
}
}
}
Gauss();
ans += (1 << B) * f[1][N + 1];
}
printf("%.3lf", ans);
return 0;
}
/*
3 3
1 2 4
1 3 5
2 3 6
*/
BZOJ2337: [HNOI2011]XOR和路径(期望 高斯消元)的更多相关文章
- 【BZOJ】2337: [HNOI2011]XOR和路径 期望+高斯消元
[题意]给定n个点m条边的带边权无向连通图(有重边和自环),在每个点随机向周围走一步,求1到n的期望路径异或值.n<=100,wi<=10^9. [算法]期望+高斯消元 [题解]首先异或不 ...
- [BZOJ2337][HNOI2011]XOR和路径(概率+高斯消元)
直接不容易算,考虑拆成位处理. 设f[i]表示i到n的期望路径异或和(仅考虑某一位),则$f[y]=\sum\limits_{exist\ x1\to y=0}\frac{f[x1]}{d[x1]}+ ...
- 【BZOJ2337】Xor和路径(高斯消元)
[BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...
- bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】
首先,我们发现,因为是无向图,所以相连的点之间是有"依赖性"的,所以不能直接用dp求解. 因为是xor,所以按位处理,于是列线性方程组,设$ x[i] $为点i到n异或和为1的期望 ...
- P3211-[HNOI2011]XOR和路径【高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/P3211 题目大意 一个\(n\)个点\(m\)条边的无向图,从\(1\)到\(n\)随机游走.求期望路径异或和. ...
- BZOJ2337: [HNOI2011]XOR和路径 期望概率dp 高斯
这个题让我认识到我以往对于图上期望概率的认识是不完整的,我之前只知道正着退还硬生生的AC做过的所有图,那么现在让我来说一下逆退,一般来说对于概率性的东西都只是正推,因为有了他爸爸才有了他,而对于期望性 ...
- BZOJ 2337 XOR和路径(高斯消元)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2337 题意:给定一个带权无向图.从1号点走到n号点.每次从当前点随机(等概率)选择一条相 ...
- 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元
[题意]给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分).n<=500. [算法]期望+高斯消元 [题解] ...
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
随机推荐
- java打包jar后,使之一直在linux上运行,不随终端退出而关闭
nohup java -jar xxx.jar&
- 修改ssh远程默认端口
修改ssh远程默认端口 Linuxssh端口修改 1. 修改ssh配置文件 [root@distzabbix ~]# vim /etc/ssh/sshd_config 找到第17行附近#Port 22 ...
- 关于Java抽象类,接口与实现接口及派生类继承基类
1. 抽象类 抽象类就是有一个或多个方法只被声明而未被实现. 抽象方法的声明以分号结束,并且用关键字abstract来说明它以标识它为抽象方法. 格式: public abstract class 类 ...
- CI框架入门笔记
当前(2019-03-22)CodeIgniter 框架的最新版本是 3.1.5,于2017年6月发布,距今快两年了也没有更新,这与 Laravel 的更新速度相比差距太大了.因为确实,它是一个很古老 ...
- POJ 2894
#include<iostream> #define MAXN 1005 using namespace std; int a[MAXN]; int main() { //freopen( ...
- centos系统(ssh)登录缓慢(输入账户密码后需要等待若干时间)
现象:打开ssh连接工具,输入用户名密码,需要等待约3分钟才能进入系统,进入系统后操作都很流畅,同时top查看系统消耗也很低! 解决:在百度和谷歌搜索大量解决方案,都是如下解决方案: #取消ssh的反 ...
- Bash数组
1. 数组申明 declare -a array 2. 数组赋值 #法1 array=(var1 var2 var3 ... varN) #法2 array=([]=var1 []=var2 []=v ...
- 【源码分析】HashMap源码再读-基于Java8
最近工作不是太忙,准备再读读一些源码,想来想去,还是先从JDK的源码读起吧,毕竟很久不去读了,很多东西都生疏了.当然,还是先从炙手可热的HashMap,每次读都会有一些收获.当然,JDK8对HashM ...
- nginx配置文件 nginx.conf 说明
#user nobody; #开启进程数 <=CPU数 worker_processes 1; #错误日志保存位置 #error_log logs/error.log; #error_log ...
- Android的ListView分页功能(上滑加载更多)
今天主要工作是将之前实现的各种ListView显示全部信息,优化成了每次加载几条数据,然后上滑的时候加载更多,底部显示一个进度条和一个文字提示,然后加载完毕后,将提示信息隐藏. 一边看教学视频一遍敲代 ...