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 ...
随机推荐
- [原创]K8飞刀 新增Acunetix WVS 远程漏洞 反制黑客
工具: K8飞刀20150603组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2015/6/3 20:41:29 简介: ...
- POJ 2860
#include<iostream> #define MAXN 20 using namespace std; int a_1[MAXN]; int a_2[MAXN]; int main ...
- 服务器返回的http状态码
状态码 响应类别 原因短语 1XX 信息性状态码(Informational) 服务器正在处理请求 2XX 成功状态码(Success) 请求已正常处理完毕 3XX 重定向状态码(Redirectio ...
- odoo开发笔记 -- 多个视图共用一个模型
除了写序列优先绑定之外, 窗口引用的视图id也要绑定,否则页面加载的时候,可能不是自己需要显示的视图.例如:<field name="view_id" ref="c ...
- h5 端图片上传-模拟多张上传
1.由于后端的限制,上传图片到服务器只能的一张一张传2.显示图片预览是本地的图片3.根据服务器返回的结果拿到相应的路径保存到提交评论的接口中4.删除的时候,需要删除对应的路径,不要把删除的提交到评论的 ...
- rubymine debug需要安装依赖
for ruby2.x gem install ruby-debug-ide --pre gem install debase --pregem install debugger2 --pre
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(七):集成 Druid 数据源
数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏 ...
- kafka主题管理
若代理设置了 auto.create.topics.enable=true,这样还未创建topic就往kafka发送消息时, 会自动创建一个 ${num.partitions}个分区和{default ...
- postgresql逻辑结构--索引(六)
一.索引简介 二.索引分类 三.创建索引 四.修改索引 五.删除索引
- 【IT笔试面试题整理】二叉树中和为某一值的路径--所有可能路径
[试题描述] You are given a binary tree in which each node contains a value. Design an algorithm to print ...