• 1491: [NOI2007]社交网络


    1491: [NOI2007]社交网络

    Time Limit: 10 Sec  Memory Limit: 64 MB
    Submit: 881  Solved: 518
    [Submit][Status]

    Description

    Input

    Output

    输出文件包括n 行,每行一个实数,精确到小数点后3 位。第i 行的实数表 示结点i 在社交网络中的重要程度。

    Sample Input

    4 4
    1 2 1
    2 3 1
    3 4 1
    4 1 1

    Sample Output

    1.000
    1.000
    1.000
    1.000

    HINT


    为1






    Source

     题解:这个嘛,我还是小小地逗比了一下(phile:汗 HansBug:T_T)——题目中说每次求出来的是s到t最短路径中经过v点的路径所占的比例,但是我还是当作占经过各点路径之和的比例了(phile:那不是重复计算了嘛 HansBug:么么哒)。。。然后说思路——其实这道题的思想有点类似于Bzoj1638(奶牛交通),通过求出各个部分的局部值来进行组合求解——在Floyd过程中,当a[i,j]=a[i,k]+a[k,j]时,则用于存储数量的b[i,j]:=b[i,j]+b[i,k]*b[k,j](简单乘法原理),当a[i,j]>a[i,k]+a[k,j](即最短路径长度被刷新时),则b[i,j]:=b[i,k]*b[k,j];然后这样字O(n^3)(N<=100呢怕啥)处理完,然后再来个O(n^3)负责统计即可。。。(HansBug:记得开int64/long long啊!!!题目中最短路径数是<=10^10,要是longint小心跪掉。。。)
     
     1 var
     2    i,j,k,l,m,n,s,t:longint;
     3    a,b:array[0..150,0..150] of int64;
     4    c:array[0..150] of int64;
     5    d:array[0..150] of extended;
     6 begin
     7      readln(n,m);
     8      fillchar(a,sizeof(a),0);
     9      fillchar(b,sizeof(b),0);
    10      for i:=1 to n do b[i,i]:=1;
    11      for i:=1 to m do
    12          begin
    13               readln(j,k,l);
    14               a[j,k]:=l;a[k,j]:=l;
    15               b[j,k]:=1;b[k,j]:=1;
    16          end;
    17      for k:=1 to n do
    18          for i:=1 to n do
    19              begin
    20                   if (i<>k) and (a[i,k]>0) then
    21                      begin
    22                           for j:=1 to n do
    23                               begin
    24                                    if (i<>j) and (j<>k) and (a[k,j]>0) then
    25                                       begin
    26                                            if ((a[k,j]+a[i,k])=a[i,j]) then
    27                                               begin
    28                                                    b[i,j]:=b[i,j]+(b[i,k]*b[k,j]);
    29                                               end
    30                                            else
    31                                                begin
    32                                                     if ((a[k,j]+a[i,k])<a[i,j]) or (a[i,j]=0) then
    33                                                        begin
    34                                                             a[i,j]:=a[k,j]+a[i,k];
    35                                                             b[i,j]:=b[i,k]*b[k,j];
    36                                                        end;
    37                                                end;
    38                                       end;
    39                               end;
    40                      end;
    41              end;
    42      fillchar(d,sizeof(d),0);
    43      for s:=1 to n do
    44          for t:=1 to n do
    45              begin
    46                   if s=t then continue;
    47                   fillchar(c,sizeof(c),0);
    48                   for i:=1 to n do
    49                       begin
    50                            if (s=i) or (t=i) then continue;
    51                            if (a[s,i]+a[i,t])<>a[s,t] then continue;
    52                            d[i]:=d[i]+(b[s,i]*b[i,t])/b[s,t];
    53                       end;
    54              end;
    55      for i:=1 to n do writeln(d[i]:0:3);
    56 end.      
  • 相关阅读:
    学习日记16、easyui editor datagrid 动态绑定url
    学习日记15-1布局页同时引用多个model
    phpstrom的find in path 搜索失效
    markdown画流程图-mermaid工具
    Windows下PHP安装 Imagick扩展
    ftp实现通过数据库的虚拟用户认证
    PHP报错Only variables should be passed by reference in的解决方法
    ffmpeg总结
    PHP执行外部命令总结(exec、system、passthru、shell_exec)
    phpstorm配置使用xdebug
  • 原文地址:https://www.cnblogs.com/HansBug/p/4176833.html
Copyright © 2020-2023  润新知