正题

题目链接:https://www.luogu.com.cn/problem/P3211


题目大意

一个nnn个点mmm条边的无向图,从111到nnn随机游走。求期望路径异或和。

2≤n≤100,1≤m≤1042\leq n\leq 100,1\leq m\leq 10^42≤n≤100,1≤m≤104


解题思路

因为是异或的期望,很难直接处理,所以考虑按位考虑每一位是111的概率。

然后nnn很小就是一个很显然的高斯消元了。设fif_ifi​表示i∼ni\sim ni∼n是111的概率。

fx=1degx(∑x−>y,w=1(1−fy)+∑x−>y,w=0fy)f_x=\frac{1}{deg_x}(\sum_{x->y,w=1}(1-f_y)+\sum_{x->y,w=0}f_y)fx​=degx​1​(x−>y,w=1∑​(1−fy​)+x−>y,w=0∑​fy​)

时间复杂度O(n3log⁡wi)O(n^3\log w_i)O(n3logwi​)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
struct node{int to,next,w;
}a[N*N*2];
int n,m,tot,deg[N],ls[N];
double f[N],ans;
void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
namespace G{double a[N][N],b[N];void init(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)a[i][j]=0;b[i]=0;}return;}void solve(double *f){for(int i=1;i<=n;i++){int z=i;for(int j=i+1;j<=n;j++)if(a[j][i]>a[z][i])z=i;swap(a[i],a[z]);swap(b[i],b[z]);double inv=a[i][i];for(int j=i;j<=n;j++)a[i][j]=a[i][j]/inv;b[i]=b[i]/inv;for(int j=i+1;j<=n;j++){double rate=-a[j][i];for(int k=i;k<=n;k++)a[j][k]+=a[i][k]*rate;b[j]+=b[i]*rate;}}for(int i=n-1;i>=1;i--){for(int j=i+1;j<=n;j++)b[i]-=b[j]*a[i][j]/a[j][j];f[i]=b[i];}return;}
};
void solve(int w){G::init();G::a[n][n]=1;for(int x=1;x<n;x++){for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(a[i].w&w)G::a[x][y]++,G::b[x]++;else G::a[x][y]--;}G::a[x][x]+=deg[x];}G::solve(f);ans+=(double)w*f[1];return;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);deg[x]++;addl(x,y,w);if(x!=y)deg[y]++,addl(y,x,w);}for(int i=0;i<=30;i++)solve(1<<i);printf("%.3lf\n",ans);return 0;
}

P3211-[HNOI2011]XOR和路径【高斯消元】相关推荐

  1. BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )

    一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...

  2. 洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)

    传送门 首先,异或的话直接讨论不好讨论,那么我们可以按位讨论,对于每一位讨论出来一个结果,然后将结果相加就好了. 然后考虑怎么讨论一位上的结果. 我们可以设出来一个dp方程:f(i)表示i到n的异或和 ...

  3. 线性代数五之高斯消元——[SDOI2010]外星千足虫,[HNOI2013]游走,[HNOI2011]XOR和路径,[hdu 4035]Maze

    多类型高斯消元杂题 [SDOI2010]外星千足虫 description solution code [HNOI2013]游走 description solution code [HNOI2011 ...

  4. 【BZOJ2337】XOR和路径,概率期望DP+高斯消元

    Time:2016.08.27 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 与游走思路有一定相似的地方 对答案的每一位进行判断 通过高斯消元解出每个点到n xor路径为1的概率 ...

  5. 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS

    [BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...

  6. BZOJ 2115 Wc2011 Xor DFS+高斯消元

    标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...

  7. 【BZOJ1923】外星千足虫,高斯消元解xor方程组

    Time:2016.08.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 原本以为是高斯消元解取模方程,后来发现这题意不就和异或方程一样吗 [异或(XOR)运算由于与" ...

  8. 2015南阳CCPC E - Ba Gua Zhen 高斯消元 xor最大

    Ba Gua Zhen Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description During the Three-Kingdom perio ...

  9. 高斯消元 zoj 3645 poj 1222/XOR消元

    double a[maxn][maxn] , x[maxn] ; //a[i][j] 系数矩阵 , a[i][n+1] = y[i] , x解 int n ; //n个方程 void guass(){ ...

最新文章

  1. memcached ---- 学习笔记
  2. 保护个人信息安全之法律思考
  3. 【极客学院每日1课 】Java入门与常用技巧
  4. 音视频技术开发周刊 | 196
  5. bzoj 3714: [PA2014]Kuglarz
  6. Unity动画系统详解5:BlendTree混合树是什么?
  7. 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)
  8. android通讯录字母特效,Flutter 城市/通讯录列表字母索引联动效果实现
  9. 产品经理岗位职责说明_11份公司高层管理人员的岗位职责说明书,改改就能用,拿去参考...
  10. 国二MySQL考些啥_国二考试时间 国二考试是什么
  11. 利用python生成图片验证码
  12. WiFi 802.11可调参数说明---信标间隔(Beacon Interval)
  13. WDF驱动中访问 PCI 设备配置空间
  14. 面试中单例模式有几种写法
  15. Volatility内存取证使用
  16. JavaScript基础知识总结 18:dom基本操作
  17. 读“王东升 新时空 硅碳融合的产业革命”拙见
  18. python 删除指定后缀文件_python3 遍历删除特定后缀名文件的方法_天津SEO
  19. 【bat】判断字符串是否包含某字符串;bat字符串截取;vbs 如何加入参数;Windows如何后台运行bat文件(没有命令提示符框);.bat文件设置自动关机以及弹框确认
  20. 飞思卡尔K22调试FXOS8700加速度和电子罗盘(2)

热门文章

  1. 关于java的项目_关于java项目与javaweb项目
  2. java符号%3e%3e是什么意思,终于找到了!有了它你就可以读懂字节码了!
  3. winform能连MySQL吗_c# winform中怎么连接mysql
  4. Java JSON对象怎么遍历_Java遍历JsonObject对象
  5. sqlsession.selectlist 会返回null么_StackOverflow经典问题:代码中如何去掉烦人的“!=nullquot;判空语句...
  6. linux上用的端口转发工具,linux下最简单好用的的端口转发工具
  7. 揭秘python的5种最佳调试方法_揭秘 IPython 的 5 种最佳调试方法-阿里云开发者社区...
  8. linux select读取节点数据失败_MySQL中覆盖索引查询和select*查询执行结果案例分析...
  9. java实用教程——组件及事件处理——概述
  10. leetcode84. 柱状图中最大的矩形