• BZOJ2337: [HNOI2011]XOR和路径(高斯消元,期望)


    解题思路:

    Xor的期望???怕你不是在逗我。

    按为期望,新技能get

    剩下的就是游走了。

    代码:

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 struct pnt{
     6     int hd;
     7     int ind;
     8 }p[101];
     9 struct ent{
    10     int twd;
    11     int lst;
    12     int vls;
    13 }e[30001];
    14 double a[201][201];
    15 int cnt;
    16 int n,m;
    17 void ade(int f,int t,int v)
    18 {
    19     cnt++;
    20     e[cnt].vls=v;
    21     e[cnt].twd=t;
    22     e[cnt].lst=p[f].hd;
    23     p[f].hd=cnt;
    24     p[f].ind++;
    25     return ;
    26 }
    27 void G_(void)
    28 {
    29     for(int i=1;i<=n;i++)
    30     {
    31         int h=i;
    32         for(int j=i+1;j<=n;j++)if(fabs(a[h][i])<fabs(a[j][i]))h=j;
    33         if(h!=i)for(int j=i;j<=n+1;j++)std::swap(a[i][j],a[h][j]);
    34         for(int j=i+1;j<=n;j++)
    35         {
    36             double s=a[j][i]/a[i][i];
    37             for(int k=i;k<=n+1;k++)a[j][k]-=a[i][k]*s;
    38         }
    39     }
    40     for(int i=n;i>1;i--)
    41     {
    42         for(int j=i-1;j>0;j--)
    43         {
    44             a[j][n+1]-=a[i][n+1]/a[i][i]*a[j][i];
    45         }
    46     }
    47     return ;
    48 }
    49 int main()
    50 {
    51 //    freopen("a.in","r",stdin);
    52     scanf("%d%d",&n,&m);
    53     for(int i=1;i<=m;i++)
    54     {
    55         int a,b,c;
    56         scanf("%d%d%d",&a,&b,&c);
    57         ade(a,b,c);if(a!=b)ade(b,a,c);
    58     }
    59     double ans=0;
    60     for(int i_=0;(1ll<<i_)<=(long long)(1e9);i_++)
    61     {
    62         memset(a,0,sizeof(a));
    63         for(int i=1;i<=n;i++)
    64         {
    65             a[i][i]=p[i].ind;if(i==n)continue;
    66             for(int i__=p[i].hd;i__;i__=e[i__].lst)
    67             {
    68                 int j=e[i__].twd;
    69                 if(e[i__].vls&(1<<i_))a[i][j]+=1.00,a[i][n+1]+=1.00;
    70                 else                  a[i][j]-=1.00;
    71             }
    72         }
    73         G_();double ps=a[1][n+1]/a[1][1];
    74         ans+=ps*(1ll<<i_);
    75     }
    76     printf("%.3lf
    ",ans);
    77     return 0;
    78 }
  • 相关阅读:
    C++ vector介绍
    C++string的使用
    关于VS2010error RC2170 : bitmap file res mp1.bmp is not in 3.00 format
    团队项目第一次讨论
    团队项目——铁大树洞个人分析
    第五周学习进度总结
    转发
    android移动端疫情展示
    《构建之法》阅读笔记03
    第四周学习进度总结
  • 原文地址:https://www.cnblogs.com/blog-Dr-J/p/10306469.html
Copyright © 2020-2023  润新知