zoukankan      html  css  js  c++  java
  • bzoj2337

    这句话感觉都能成定理了:
    xor问题逐位考虑……
    这道题就是这样,然后和bzoj3143和相似
    但这道题多了自环,于是我们设f[i]表示当前位由i走到n的后为1的数学期望
    显然f[n]=0,可得f[i]=sigma((1/d[i])*f[j])(如果边权这位为0)+sigma((1/d[i])*(1-f[j]))(边权这位为1)
    然后高斯消元即可

     1 type node=record
     2        po,len,next:longint;
     3      end;
     4 
     5 var w:array[0..20010] of node;
     6     b,d,p:array[0..110] of longint;
     7     a:array[0..110,0..110] of extended;
     8     n,m,x,y,z,len,t,i,j,k:longint;
     9     c,ans:extended;
    10 
    11 function max(a,b:longint):longint;
    12   begin
    13     if a>b then exit(a) else exit(b);
    14   end;
    15 
    16 procedure swap(var a,b:extended);
    17   var c:extended;
    18   begin
    19     c:=a;
    20     a:=b;
    21     b:=c;
    22   end;
    23 
    24 procedure add(x,y,z:longint);
    25   begin
    26     inc(len);
    27     w[len].po:=y;
    28     w[len].len:=z;
    29     w[len].next:=p[x];
    30     p[x]:=len;
    31   end;
    32 
    33 procedure work;
    34   var i,j,k,p:longint;
    35   begin
    36     for i:=1 to n-2 do
    37     begin
    38       p:=i;
    39       for k:=i+1 to n-1 do
    40         if abs(a[k,i])>abs(a[p,i]) then p:=k;
    41       if p<>i then
    42       begin
    43         for j:=i to n+1 do
    44           swap(a[p,j],a[i,j]);
    45       end;
    46       for k:=i+1 to n-1 do
    47         if abs(a[k,i])>0 then
    48         begin
    49           for j:=n+1 downto i do
    50             a[k,j]:=a[k,j]-a[i,j]*a[k,i]/a[i,i];
    51         end;
    52     end;
    53     a[n,n+1]:=0;
    54     for i:=n-1 downto 1 do
    55     begin
    56       for j:=i+1 to n-1 do
    57         a[i,n+1]:=a[i,n+1]-a[j,n+1]*a[i,j];
    58       a[i,n+1]:=a[i,n+1]/a[i,i];
    59     end;
    60   end;
    61 
    62 begin
    63   readln(n,m);
    64   for i:=1 to m do
    65   begin
    66     readln(x,y,z);
    67     if z<>0 then t:=max(t,trunc(ln(z)/ln(2)));
    68     inc(d[x]);
    69     inc(d[y]);
    70     if x=y then dec(d[x])
    71     else add(y,x,z);
    72     add(x,y,z);
    73   end;
    74   for i:=0 to t do
    75   begin
    76     fillchar(a,sizeof(a),0);
    77     for j:=1 to n do
    78       a[j,j]:=1;
    79     for k:=1 to n do
    80     begin
    81       j:=p[k];
    82       while j<>0 do
    83       begin
    84         y:=w[j].po;
    85         if w[j].len and (1 shl i)=0 then a[k,y]:=a[k,y]-1/d[k]
    86         else begin
    87           a[k,y]:=a[k,y]+1/d[k];
    88           a[k,n+1]:=a[k,n+1]+1/d[k];
    89         end;
    90         j:=w[j].next;
    91       end;
    92     end;
    93     work;
    94     ans:=ans+1 shl i*a[1,n+1];
    95   end;
    96   writeln(ans:0:3);
    97 end.
    View Code
  • 相关阅读:
    全国省市区县数据库脚本
    在 PHP 中养成7个面向对象的好习惯
    DIV CSS网页布局常用的方法与技巧[转]
    Div弹出提示效果(原创)
    通过数据库备份还原 TFS 到新服务器(转)
    C#多线程实现方法——Task/Task.Factary
    SEH结构异常处理使用
    Windows/Unix/Linux编译C/C++添加头文件与库的搜索路径
    windows 使用技巧
    linux重要命令
  • 原文地址:https://www.cnblogs.com/phile/p/4473033.html
Copyright © 2011-2022 走看看