洛谷P3211 [HNOI2011]XOR和路径(期望dp+高斯消元)
高斯消元还是一如既往的难打……板子都背不来……Kelin大佬太强啦
不知道大佬们是怎么发现可以按位考虑贡献,求出每一位是$1$的概率
然后设$f[u]$表示$u->n$的路径上这一位为$1$的概率,然后设$deg[u]$表示$u$的出度
那么$1-f[u]$就是路径上这一位为$0$的概率
然后瞎推可以得到$$f[u]=\frac1{dg[u]}(\sum_{w(u,v)=0}f[v]+\sum_{w(u,v)=1}1-f[v])$$
$$ dg[u]f[u]=\sum_{w(u,v)=0}f[v]+\sum_{w(u,v)=1}1-f[v]$$
然后移个项$$dg[u]f[u]-\sum_{w(u,v)=0}f[v]+\sum_{w(u,v)=1}f[v]=\sum_{w(u,v)=1}1$$
高斯消元带进去乱搞
//minamoto
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while((ch=getc())>''||ch<'')
(ch=='-')&&(flag=true);
for(res=num;(ch=getc())<=''&&ch>='';res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=,M=2e4+;const double eps=1e-;
int head[N],Next[M],ver[M],edge[M],tot;
inline void add(int u,int v,int e){
ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
}
int n,m,mx,dg[N];double res,ans[N],f[N][N];
void build(int x){
f[n][n]=;
for(int u=;u<n;++u){
f[u][u]=dg[u];
for(int i=head[u];i;i=Next[i]){
int v=ver[i];
if(edge[i]&x) ++f[u][v],++f[u][n+];
else --f[u][v];
}
}
}
void Gauss(){
for(int i=;i<=n;++i){
int k=i;
for(int j=i+;j<=n;++j)
if(fabs(f[k][i])<fabs(f[j][i])) k=j;
if(k!=i) swap(f[i],f[k]);
double div=f[i][i];
for(int j=i;j<=n+;++j) f[i][j]/=div;
for(int j=i+;j<=n;++j){
double t=f[j][i];
for(int k=i;k<=n+;++k)
f[j][k]-=t*f[i][k];
}
}
ans[n]=f[n][n+]/f[n][n];
for(int i=n-;i;--i){
for(int j=i+;j<=n;++j)
f[i][n+]-=f[i][j]*ans[j];
ans[i]=f[i][n+]/f[i][i];
}
for(int i=;i<=n;++i) for(int j=;j<=n+;++j) f[i][j]=;
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read();
for(int i=,u,v,e;i<=m;++i){
u=read(),v=read(),e=read();
add(u,v,e),++dg[u];
if(u!=v) add(v,u,e),++dg[v];
cmax(mx,e);
}
for(int i=;i<=mx;i<<=)
build(i),Gauss(),res+=ans[]*i;
printf("%.3lf\n",res);
return ;
}
洛谷P3211 [HNOI2011]XOR和路径(期望dp+高斯消元)的更多相关文章
- 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元
[BZOJ2337][HNOI2011]XOR和路径 Description 题解:异或的期望不好搞?我们考虑按位拆分一下. 我们设f[i]表示到达i后,还要走过的路径在当前位上的异或值得期望是多少( ...
- 洛谷 P5249 - [LnOI2019]加特林轮盘赌(期望 dp+高斯消元)
题面传送门 期望真 nm 有意思,所以蒟蒻又来颓期望辣 先特判掉 \(P_0=0\) 的情况,下面假设 \(P_0\ne 0\). 首先注意到我们每次将加特林对准一个人,如果这个人被毙掉了,那么相当于 ...
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...
- 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)
题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...
- 【洛谷3232】[HNOI2013] 游走(贪心+高斯消元)
点此看题面 大致题意: 一个无向连通图,小\(Z\)从\(1\)号顶点出发,每次随机选择某条边走到下一个顶点,并将\(ans\)加上这条边的编号,走到\(N\)号顶点时结束.请你对边进行编号,使总分期 ...
- ZJUT 1423 地下迷宫(期望DP&高斯消元)
地下迷宫 Time Limit:1000MS Memory Limit:32768K Description: 由于山体滑坡,DK被困在了地下蜘蛛王国迷宫.为了抢在DH之前来到TFT,DK必须尽快走 ...
- Codeforces.24D.Broken robot(期望DP 高斯消元)
题目链接 可能这儿的会更易懂一些(表示不想再多写了). 令\(f[i][j]\)表示从\((i,j)\)到达最后一行的期望步数.那么有\(f[n][j]=0\). 若\(m=1\),答案是\(2(n- ...
- HDU4418 Time travel(期望dp 高斯消元)
题意 题目链接 Sol mdzz这题真的太恶心了.. 首先不难看出这就是个高斯消元解方程的板子题 \(f[x] = \sum_{i = 1}^n f[to(x + i)] * p[i] + ave\) ...
- HDU 2262 Where is the canteen 期望dp+高斯消元
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...
随机推荐
- linux日志服务器审计客户端history记录
https://blog.csdn.net/yanggd1987/article/details/70255179
- ATcoder 2000 Leftmost Ball
Problem Statement Snuke loves colorful balls. He has a total of N×K balls, K in each of his favorite ...
- 转:TLV 格式及编解码示例
TLV是一种可变格式,意思就是: Type类型, Lenght长度,Value值: Type和Length的长度固定,一般那是2.4个字节(这里统一采用4个字节): Value的长度有Length指定 ...
- how to read openstack code: action extension
之前我们看过了core plugin, service plugin 还有resource extension. resource extension的作用是定义新的资源.而我们说过还有两种exten ...
- window环境下搭建SVN服务器
<span style="font-family: Arial; rgb(255, 255, 255);">第一步:准备工具:</span> 1.SVN服务 ...
- 安装PyQt5和Eric6
安装官方的指引,安装起来本来是非常简单的,但是我前后折腾了两天,甚至连Eric得源码都去调试都没成功.过程如下: 在PyQt5的官网链接中下载轮子 PyQt5-5.7.1-5.7.1-cp34.cp3 ...
- 遍历数据库全部表,将是datetime类型的列的值进行更新
declare @tablename nvarchar(80) declare @cloumn nvarchar(80) declare @sql nvarchar(400) declare ...
- C和Fortran互相传递动态数组
C和Fortran的相互调用传递数值的方法有很多,但是F03标准的出笼,使用ISO_C_BINDING进行C和Fortran的互相调用有着更显著的优势: 1.与编译器和平台无关: 2.Fortran中 ...
- 【ios系列】-数据储存
第一:plist属性列表 适用对象:仅仅是Foundation框架自带的一些类比如:NString\NSarry\NSDictionary\NSset\NSnumber\NSdata 使用: 1:调用 ...
- [iOS]经常使用正則表達式
经常使用正則表達式大全!(比如:匹配中文.匹配html) 匹配中文字符的正則表達式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包含汉字 ...