• bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】


    首先,我们发现,因为是无向图,所以相连的点之间是有“依赖性”的,所以不能直接用dp求解。
    因为是xor,所以按位处理,于是列线性方程组,设$ x[i] $为点i到n异或和为1的期望,因为从1到n和从n到1一样,所以选择倒着推,即,
    if(deg[e[i].va]==0)

    [x[u]=sum_{v}^{vsubset son(u)}frac{x[v]}{deg[i]} ]

    else

    [x[u]=sum_{v}^{vsubset son(u)}frac{1-x[v]}{deg[i]} ]

    列n元n次方程组高斯消元求解即可

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    const int N=105,M=100005;
    int n,m,h[N],cnt,in[N];
    double f[N][N],ans;
    struct qwe
    {
    	int ne,to,va;
    }e[M<<1];
    void add(int u,int v,int w)
    {
    	cnt++;
    	in[u]++;
    	e[cnt].ne=h[u];
    	e[cnt].to=v;
    	e[cnt].va=w;
    	h[u]=cnt;
    }
    void gaosi()
    {
    	for(int i=1;i<=n;i++)
    	{
    		int id=i;
    		double mx=0.0;
    		for(int j=i;j<=n;j++)
    			if(fabs(f[j][i])>mx)
    				id=j,mx=fabs(f[j][i]);
    		if(id!=i)
    			for(int j=1;j<=n+1;j++)
    				swap(f[id][j],f[i][j]);
    		double t=f[i][i];
    		for(int j=1;j<=n+1;j++)
    			f[i][j]/=t;
    		for(int j=1;j<=n;j++)
    			if(j!=i)
    			{
    				double t=f[j][i];
    				for(int k=1;k<=n+1;k++)
    					f[j][k]-=t*f[i][k];
    			}
    	}
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for (int i=1,x,y,z;i<=m;i++)
    	{
    		scanf("%d%d%d",&x,&y,&z);
    		add(x,y,z);
    		if (x!=y) 
    			add(y,x,z);
    	}
    	for(int i=0;i<=30;i++)
    	{
    		memset(f,0,sizeof(f));
    		for(int u=1;u<=n-1;u++)
    		{
    			f[u][u]=1.0;
    			for(int j=h[u];j;j=e[j].ne)
    			{
    				if(e[j].va&(1<<i)) 
    					f[u][e[j].to]+=1.0/in[u],f[u][n+1]+=1.0/in[u];
    				else 
    					f[u][e[j].to]-=1.0/in[u];
    			}
    		}
    		f[n][n]=1.0;
    		gaosi();
    		ans+=(f[1][n+1])*(1<<i);
    	}
    	printf("%.3lf
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    opacity兼容性以及存在问题处理
    删除节点方法要注意的区别
    java基础-常见面试题(一)
    第04次作业-树
    第03次作业-栈和队列
    第02次作业-线性表
    Data_Structure-绪论作业
    C语言第二次实验报告
    C语言第一实验报告
    mysql 查询优化
  • 原文地址:https://www.cnblogs.com/lokiii/p/8151499.html
Copyright © 2020-2023  润新知