思路:先求出每两点之间的最短路,建出n个最短路径图,然后枚举起点终点和中间点,计算条数用到拓扑图dp。。。

看别人的方法很巧妙地用floyd在计算最短路的时候就可以直接计算条数啦。。。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int> using namespace std; const int N = + ;
const int M = 1e4 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +; int n, m, tot, d[N][N], head[N];
LL dp[N][N];
double ans[N];
bool in[N];
vector<int> Edge[N][N]; struct EDGE {
int from, to, w, nx;
} edge[M]; void add(int u, int v, int w) {
edge[tot].from = u;
edge[tot].to = v;
edge[tot].w = w;
edge[tot].nx = head[u];
head[u] = tot++;
} void spfa(int s) {
memset(in, false, sizeof(in)); queue<int> que; que.push(s);
d[s][s] = , in[s] = true; while(!que.empty()) {
int u = que.front(); que.pop();
in[u] = false;
for(int i = head[u]; ~i; i = edge[i].nx) {
int v = edge[i].to, w = edge[i].w;
if(d[s][u] + w < d[s][v]) {
d[s][v] = d[s][u] + w;
if(!in[v]) in[v] = true, que.push(v);
}
} } for(int i = ; i < tot; i++) {
int u = edge[i].from, v = edge[i].to, w = edge[i].w;
if(d[s][u] + w == d[s][v]) {
Edge[s][v].push_back(u);
}
}
} LL dfs(int s, int u) {
if(s == u) return ;
if(dp[s][u] != -) return dp[s][u];
dp[s][u] = ;
for(int k = ; k < Edge[s][u].size(); k++) {
int v = Edge[s][u][k];
dp[s][u] += dfs(s, v);
}
return dp[s][u];
} int main() {
memset(head, -, sizeof(head));
memset(d, inf, sizeof(d));
memset(dp, -, sizeof(dp)); scanf("%d%d", &n, &m); for(int i = ; i <= m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
add(u, v, w); add(v, u, w);
} for(int i = ; i <= n; i++) {
spfa(i);
} for(int i = ; i <= n; i++) {
for(int j = i + ; j <= n; j++) {
LL cnt = dfs(i, j);
for(int k = ; k <= n; k++) {
if(k == i || k == j) continue;
if(d[i][k] + d[j][k] != d[i][j]) continue;
LL ret = dfs(i, k) * dfs(j, k);
ans[k] += 1.0 * ret / cnt;
}
}
} for(int i = ; i <= n; i++) {
printf("%.3f\n", ans[i] * );
}
return ;
} /*
3
3 2
*/

bzoj 1491的更多相关文章

  1. bzoj 1491 floyd

    我们用w[i][j]表示i到j的最短路的数量,dis[i][j]表示i到j的最短路,那么我们在floyd的时候,如果dis[i][k]+dis[k][j]==dis[i][j],根据乘法原理我们就w[ ...

  2. BZOJ 1491 [NOI2007]社交网络

    1491: [NOI2007]社交网络 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1159  Solved: 660[Submit][Status] ...

  3. BZOJ 1491: [NOI2007]社交网络( floyd )

    floyd...求最短路时顺便求出路径数. 时间复杂度O(N^3) ------------------------------------------------------------------ ...

  4. BZOJ 1491: [NOI2007]社交网络(Floyd+暴力乱搞)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1491 题解: 先看数据范围,n<=100..欸可以乱搞了 首先因为小学学过的乘法原理 ...

  5. BZOJ 1491 社交网络 Floyd 最短路的数目

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1491 题目大意: 见链接 思路: 直接用floyd算法求最短路,同时更新最短路的数目即 ...

  6. 【BZOJ 1491】 [NOI2007]社交网络

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

  7. BZOJ 1491 社交网络(最短路)

    对于这道题,如果我们能求出s到t的最短路径数目和s由v到t的最短路径数目,剩下的很好求了. 令dis[i][j]表示i到j的最短路径,dp[i][j]表示i到j的最短路径条数,如果dis[s][v]+ ...

  8. BZOJ1491: [NOI2007]社交网络

    传送门 最短路计数问题.因为数据量非常小($N \leq 100$),所以Floyd随便搞搞就行了. $f[i][j]$表示路径长度,$g[i][j]$表示最短路方案数. 先跑一遍裸的Floyd,然后 ...

  9. 【BZOJ】1491: [NOI2007]社交网络(floyd)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1491 囧囧囧...................... 囧1:虽然自己想到做法了,但是操作的时候, ...

随机推荐

  1. Android数据存储与访问

    1.文件    1)保存到手要内存,文件保存到/data/data对应的应用程序包下面    如    FILE_PATH = "/data/data/com.diysoul.filedem ...

  2. Codeforces Round #403 (Div. 2) B 三分 C dfs

    B. The Meeting Place Cannot Be Changed time limit per test 5 seconds memory limit per test 256 megab ...

  3. JavaScript之typedof,instanceof,Array.isArray()

    typedof value检测对象类型. value instanceof Array检测a对象是否由b对象类型 Array.isArray(value)在两个框架中判断是否为数组类型.

  4. UIActivityIndicatorView---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址: iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 UIActivityIndicatorViewactivityIndicatorVi ...

  5. linux 下 /bin /sbin 的区别 -- (转)

    /bin,/sbin,/usr/bin,/usr/sbin区别 /  : this is root directory                root 用户根目录 /bin : command ...

  6. 函数getopt()及其参数optind -- (转)

    getopt被用来解析命令行选项参数 #include <unistd.h>       extern char *optarg;  //选项的参数指针       extern int ...

  7. hdu 1690 Bus System(Dijkstra最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1690 Bus System Time Limit: 2000/1000 MS (Java/Others ...

  8. Apache2.4+Tomcat7 集群

    Apache2.4+Tomcat7 集群: 1.下载并安装相对应的软件 apache下载地址:http://httpd.apache.org/ 这里使用apache2.4 tomcat下载地址:htt ...

  9. 2017-2018-1 20179205《Linux内核原理与设计》第六周作业

    <Linux内核原理与设计> 视频学习及操作 给MenuOS增加time和time-asm命令的方法: 1.更新menu代码到最新版 rm menu -rf //强制删除menu, rm ...

  10. [CTF技巧]批量连接SSH批量执行命令

    https://files.cnblogs.com/files/nul1/autossh1.3.jar.zip 下载下来以后直接将后缀去除就好了. 比赛的时候可以批量写一个不死马然后你懂的. Linu ...