传送门


题目还算不难吧

首先我们枚举点$i$,将其他所有点到这个点的最短路求出来

然后我们在这一次建出的最短路$DAG$的反图上进行拓扑排序。假设我们算到了点$j$,点$j$的人流量为$t_j$,点$j$连出去的边到达的点为点集$\{v\}$,那么对于每一个点$u \in \{v\}$,边$(j,u)$的流量就会增加$\frac{t_j}{|\{v\}|}$,$t_u$会加上$\frac{t_j}{|\{v\}|}$

总时间复杂度$O(N^2)$

 #include<bits/stdc++.h>
 #define ld long double
 using namespace std;
 inline int read(){
     ;
     char c = getchar();
     while(!isdigit(c))    c = getchar();
     ) + (a << ) + (c ^ ') , c = getchar();
     return a;
 }
 inline int max(int a , int b){
     return a > b ? a : b;
 }
 struct Ed{
     int start , end , upEd;
 }ans[];
 ] , ifRail[][];
 ];
 ] , minRoute[];
 ld peo[][] , To[][];
 struct cmp{
     bool operator() (const int& a, const int& b ){
         return minRoute[a] < minRoute[b];
     }
 };
 int main(){
     int N = read() , M = read();
      ; i <= M ; i++){
         int a = read() , b = read();
         ans[(i << ) - ].start = a;
         ans[(i << ) - ].end = b;
         ans[(i << ) - ].upEd = firEd[a];
         firEd[a] = (i << ) - ;
         ans[i << ].start = b;
         ans[i << ].end = a;
         ans[i << ].upEd = firEd[b];
         firEd[b] = i << ;
         ifRail[a][b] = ifRail[b][a] = ;
     }
      ; i <= N ; i++)
          ; j <= N ; j++)    To[i][j] = read();
      ; i <= N ; i++){
         memset(minRoute , 0x3f , sizeof(minRoute));
         memset(Times ,  , sizeof(Times));
         minRoute[i] = ;
         Times[i] = ;
         queue < int > q;
         priority_queue < int , vector < int > , cmp > q1;
         q.push(i);
         while(!q.empty()){
             int t = q.front();
             q.pop();
             ;
             for(int j = firEd[t] ; j ; j = ans[j].upEd)
                 ){
                     minRoute[ans[j].end] = minRoute[t] + ;
                     Times[ans[j].end] = Times[t];
                     q.push(ans[j].end);
                     f = ;
                 }
                 ){
                     Times[ans[j].end] += Times[t];
                     f = ;
                 }
             if(!f)    q1.push(t);
         }
         memset(vis ,  , sizeof(vis));
         vis[i] = ;
         while(!q1.empty()){
             int t = q1.top();
             q1.pop();
              ; j <= N ; j++)
                 ){
                     ld t1 = (ld)To[i][t] * Times[j] / Times[t];
                     peo[j][t] += t1;
                     peo[t][j] += t1;
                     To[i][j] += t1;
                     if(!vis[j]){
                         vis[j] = ;
                         q1.push(j);
                     }
                 }
         }
     }
      ; i <= M ; i++)
         cout << ) << peo[ans[i << ].start][ans[i << ].end] + 1e- << endl;
     ;
 }

Luogu2164 SHOI2007 交通网络 期望、BFS、拓扑排序的更多相关文章

  1. [LuoguP2164][SHOI2007]交通网络_拓扑排序_概率期望

    交通网络 题目链接:https://www.luogu.org/problemnew/solution/P2164 数据范围:略. 题解: 直接算不好算,我们考虑建反图然后$Toposort$. 这样 ...

  2. C. Journey bfs 拓扑排序+dp

    C. Journey 补今天早训 这个是一个dp,开始我以为是一个图论,然后就写了一个dij和网络流,然后mle了,不过我觉得如果空间开的足够的,应该也是可以过的. 然后看了题解说是一个dp,这个dp ...

  3. uvaLA4255 Guess BFS+拓扑排序

    算法指南白书 思路:“连续和转化成前缀和之差” #include <stdio.h> #include <string.h> #include <iostream> ...

  4. hihoCoder1343 : Stable Members【BFS拓扑排序】

    题目链接:https://hihocoder.com/problemset/problem/1343 #1343 : Stable Members 时间限制:10000ms 单点时限:1000ms 内 ...

  5. CH 2101 - 可达性统计 - [BFS拓扑排序+bitset状压]

    题目链接:传送门 描述 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条 ...

  6. hihocoder 1174 [BFS /拓扑排序判断是否有环]

    hihocoder 1174 [算法]: 计算每一个点的入度值deg[i],这一步需要扫描所有点和边,复杂度O(N+M). 把入度为0的点加入队列Q中,当然有可能存在多个入度为0的点,同时它们之间也不 ...

  7. Going from u to v or from v to u?_POJ2762强连通+并查集缩点+拓扑排序

         Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K       Description I ...

  8. 【ZOJ - 3780】 Paint the Grid Again (拓扑排序)

    Leo has a grid with N × N cells. He wants to paint each cell with a specific color (either black or ...

  9. [LeetCode] 207. 课程表(拓扑排序,BFS)

    题目 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量 ...

随机推荐

  1. python之常用模块补充

    namedtuple 命名元组 ->类似创建了一个类 from collections import namedtuple p = namedtuple("point", [ ...

  2. Windows下 webpack4.0 的安装

    这里我们通过npm来进行安装 1. 安装 webpack // 全局安装webpack npm install webpack -g 2. 通过 webpack -v 命令查看当前安装的版本 此时如果 ...

  3. Apex 的异常处理

    Apex 中的异常处理 在 Apex 中,和其他语言类似,对于异常处理通常使用 try.catch.finally.throw 等关键字. 对于每一个 try 代码段,必须要有至少一个 catch 或 ...

  4. CentOS7.4 系统下 Tomcat 启动慢解决方法

    CentOS7.4 系统下 Tomcat 启动慢解决的方法   首先查看日志信息,查看因为什么而启动慢 在CentOS7启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是s ...

  5. JMeter 查看结果树监听器响应数据中文显示乱码解决方法

    查看结果树监听器响应数据中文显示乱码解决方法 by:授客 QQ:1033553122   问题描述 使用监听器-查看结果树(View Results Tree Listener)过程中发现,响应数据面 ...

  6. loadrunner 运行脚本-Run-time Settings之Pacing设置

    运行脚本-Run-time Settings之Pacing设置 by:授客 QQ:1033553122   As soon as the previous iteration ends 前一个迭代一结 ...

  7. (网页)JS去掉字符串前后空格或去掉所有空格的用法(转)

    转自脚本之家: 这篇文章主要介绍了JS去掉字符串前后空格或去掉所有空格的用法,需要的朋友可以参考下: 代码如下: function Trim(str) { return str.replace(/(^ ...

  8. python包中__init__.py的作用

    1.__init__.py定义包的属性和方法 一般为空文件,但是必须存在,没有__init__.py表明他所在的目录只是目录不是包 2.导入包的时候使用 例如有一个test目录,test下有xx1.p ...

  9. 洗礼灵魂,修炼python(46)--巩固篇—如虎添翼的property

    @property 在前面装饰器一章中,提过一句话,装饰器也可以用于类中,确实可以的,并且python的类也内置了一部分装饰器.并且在前两章的hasattr等四个内置方法中,也说过其用法很类似装饰器, ...

  10. 使用kibana操作elasticsearch实现增删改查

    本篇博客,本人写的是方法,大家将对应的字段放入对应的位置就可以了 注:elasticsearch中,索引相当于MySQL中的数据库,类型相当于数据库中的表,即索引名就为数据库库名,类型就为表名 1.创 ...