BZOJ2337: [HNOI2011]XOR和路径(高斯消元,期望)
2024-08-31 19:30:46
解题思路:
Xor的期望???怕你不是在逗我。
按为期望,新技能get
剩下的就是游走了。
代码:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
struct pnt{
int hd;
int ind;
}p[];
struct ent{
int twd;
int lst;
int vls;
}e[];
double a[][];
int cnt;
int n,m;
void ade(int f,int t,int v)
{
cnt++;
e[cnt].vls=v;
e[cnt].twd=t;
e[cnt].lst=p[f].hd;
p[f].hd=cnt;
p[f].ind++;
return ;
}
void G_(void)
{
for(int i=;i<=n;i++)
{
int h=i;
for(int j=i+;j<=n;j++)if(fabs(a[h][i])<fabs(a[j][i]))h=j;
if(h!=i)for(int j=i;j<=n+;j++)std::swap(a[i][j],a[h][j]);
for(int j=i+;j<=n;j++)
{
double s=a[j][i]/a[i][i];
for(int k=i;k<=n+;k++)a[j][k]-=a[i][k]*s;
}
}
for(int i=n;i>;i--)
{
for(int j=i-;j>;j--)
{
a[j][n+]-=a[i][n+]/a[i][i]*a[j][i];
}
}
return ;
}
int main()
{
// freopen("a.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
ade(a,b,c);if(a!=b)ade(b,a,c);
}
double ans=;
for(int i_=;(1ll<<i_)<=(long long)(1e9);i_++)
{
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
{
a[i][i]=p[i].ind;if(i==n)continue;
for(int i__=p[i].hd;i__;i__=e[i__].lst)
{
int j=e[i__].twd;
if(e[i__].vls&(<<i_))a[i][j]+=1.00,a[i][n+]+=1.00;
else a[i][j]-=1.00;
}
}
G_();double ps=a[][n+]/a[][];
ans+=ps*(1ll<<i_);
}
printf("%.3lf\n",ans);
return ;
}
最新文章
- 产经新闻:公交WiFi这次能扛多久
- 初学者的python学习笔记2
- phpcms2008 常用数组,变量整理
- SQL 中delete和truncate区别
- 把jqmobi 變成jQuery 的插件 從此使用jQuery
- 剑指OFFER之丑数(九度OJ1214)
- slabs.c
- 图的最短路径问题————树上奶牛(tree.cpp)
- WPF Multi-Touch 开发:基础触屏操作(Raw Touch)
- 从入门到放弃之IO
- c++(循环单向链表)
- String、StringBuffer、与StringBuilder的区别
- Flask 部署和分发
- pwnable.tw dubblesort
- Oracle 10046
- MD5加密文件
- EBS WebADI 存储过程增加参数
- Hacked VisualSVN Server by PHP to allow user change password
- 用CMD命令进行关机/重启
- js中 object.constructor