[NOI 2007]社交网络
Description
为结点v在社交网络中的重要程度。为了使I(v)和Cs,t(v)有意义,我们规定需要处理的社交网络都是连通的无向图,即任意两个结点之间都有一条有限长度的最短路径。现在给出这样一幅描述社交网络的加权无向图,请你求出每一个结点的重要程度。Input
Output
输出包括n行,每行一个实数,精确到小数点后3位。第i行的实数表示结点i在社交网络中的重要程度。
Sample Input
1 2 1
2 3 1
3 4 1
4 1 1
Sample Output
1.000
1.000
1.000
HINT
社交网络如下图所示。

题解
从数据约定来看,$n<=100$,明显可以用$floyd$,而且题目要求算某个中间点的重要程度,也比较符合$floyd$以中间点划分阶段的思想。
这道题主要就是要推理出最短路的条数怎么算。
令$w[i,j]$为从点$i$到点$j$的最短路径条数,$f[i,j]$为最短路。则根据最短路径拥有最优子结构的性质和乘法原理,我们可以得出:
$$w[i,j]=w[i,j]+w[i,k]*w[k,j](f[i,j]=f[i,k]+f[k,j])$$
$$w[i,j]=w[i,k]*w[k,j](f[i,j]>f[i,k]+f[k,j])$$
再令$g[i,j,k]$为从点$i$到点$j$且经过点$k$的最短路径的条数。也正是根据这个最优子结构,我们又可以明白:
$$g[i,j,k]=w[i,k]*w[k,j](f[i,j]=f[i,k]=f[k,j])$$
然后根据题目所给的公式统计答案就行了。
//It is made by Awson on 2017.9.25
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define sqr(x) ((x)*(x))
#define Abs(x) ((x) < 0 ? (-(x)) ? (x))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int N = ;
LL Read() {
LL sum = ;
char ch = getchar();
while (ch < '' || ch > '') ch = getchar();
while (ch >= '' && ch <= '') sum = (sum<<)+(sum<<)+ch-, ch = getchar();
return sum;
} LL n, m, u, v, c;
LL f[N+][N+];
LL cnt[N+][N+];
double ans[N+]; void work() {
n = Read(), m = Read();
memset(f, /, sizeof(f));
while (m--) {
u = Read(), v = Read(), c = Read();
if (f[u][v] > c) {
f[u][v] = f[v][u] = c;
cnt[u][v] = cnt[v][u] = ;
}
else if (f[u][v] == c)
cnt[u][v] = ++cnt[v][u];
}
for (LL k = ; k <= n; k++)
for (LL i = ; i <= n; i++)
for (LL j = ; j <= n; j++)
if (k != j && k != i && i != j) {
if (f[i][k]+f[k][j] < f[i][j]) {
f[i][j] = f[i][k]+f[k][j];
cnt[i][j] = cnt[i][k]*cnt[k][j];
}
else if (f[i][k]+f[k][j] == f[i][j])
cnt[i][j] += cnt[i][k]*cnt[k][j];
}
for (LL k = ; k <= n; k++)
for (LL i = ; i <= n; i++)
for (LL j = ; j <= n; j++)
if (k != j && k != i && i != j)
if (f[i][k]+f[k][j] == f[i][j])
ans[k] += (double)(cnt[i][k]*cnt[k][j])/(double)(cnt[i][j]);
for (LL i = ; i <= n; i++)
printf("%.3lf\n", ans[i]);
}
int main() {
freopen("bestlink.in", "r", stdin);
freopen("bestlink.out", "w", stdout);
work();
return ;
}
[NOI 2007]社交网络的更多相关文章
- 解题:NOI 2007 社交网络
题面 先跑一边Floyd乘法原理统计任意两点间最短路数目,然后再枚举一次按照题意即可求出答案,会写那道JSOI2007就会这个 #include<cstdio> #include<c ...
- 【NOI 2007】 社交网络
[题目链接] 点击打开链接 [算法] 首先,跑floyd,计算最短路和最短路径数 然后,计算答案,枚举k,s,t,若dist[s][k] + dist[k][t] = dist[s][t], 那么,点 ...
- 【BZOJ 1494】【NOI 2007】生成树计数
http://www.lydsy.com/JudgeOnline/problem.php?id=1494 这道题..因为k很小,而且我们只关心连续的k个节点的连通性,所以把连续的k个点轮廓线上的连通性 ...
- 【BZOJ 1492】【NOI 2007】货币兑换Cash
这是道CDQ分治的例题: $O(n^2)$的DP: f [1]←S* Rate[1] / (A[1] * Rate[1] + B[1]) Ans←SFor i ← 2 to n For j ←1 to ...
- 线性代数(矩阵乘法):NOI 2007 生成树计数
这道题就是深搜矩阵,再快速幂. #include <iostream> #include <cstring> #include <cstdio> #include ...
- [NOI 2007]货币兑换Cash
Description 题库链接 (按我的语文水平完全无 fa♂ 概括题意,找了 hahalidaxin 的题意简述... 有 \(AB\) 两种货币,每天可以可以付 \(IP_i\) 元,买到 \( ...
- NOI 2007 货币兑换Cash (bzoj 1492) - 斜率优化 - 动态规划 - CDQ分治
Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...
- dp式子100个……
1. 资源问题1-----机器分配问题F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2. 资源问题2------01背包问题F[I,j]:=max(f[i- ...
- dp方程
1. 资源问题1 -----机器分配问题 F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2. 资源问题2 ------01背包问题 F[I,j]:=ma ...
随机推荐
- C语言第一次作业——输入输出格式
题目1温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码 #include& ...
- Python strip()方法
描述 Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 语法 strip()方法语法: str.strip([chars]); 参数 chars -- 移除字符串头尾指定 ...
- 《高级软件测试》JIRA使用手册(二)JIRA安装
Jira Software 下载地址 Windows系统x86平台:https://downloads.atlassian.com/software/jira/downloads/atlassian- ...
- 从数据恢复角度解析RAID6结构原理
[什么是RAID] RAID的概念描述在互联网上比比皆是,用最简单的原理描述,就是在定义存储方式时允许在一部分数据缺失的情况下不影响全部数据,类似于通讯领域的纠错码.不同的冗余模式形成了不同的R ...
- nyoj n-1位数
n-1位数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的 ...
- 06_Python的数据类型3元组,集合和字典_Python编程之路
上一节跟大家讲了Python的列表,当然不是完整的讲完,后续我们还会提到,这一节我们还是来讲Python的数据类型 首先要讲到的就是元组 元组其实拥有列表的一些特性,可以存储不同类型的值,但在某些方面 ...
- python小练习之三---购物车程序
购物车购物的例子 严格来讲,这个例子相对大一些 功能也稍完备一些,具有用户登录,商品上架,用户购物,放入购物车,展示每个用户的购物车里的商品的数量,用户账户余额,支持用户账户充值等 下面展示的代码有些 ...
- Java XML Dom解析工具
Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...
- 关于kali linux 2.0的vmware tools的安装问题
在安装好kali linux 2.0 后,首先要做的就是添加源并更新系统,否则会出现软件定位问题. 在kali 2.0中,vmware tools已经不能使用了,官方放了一个工具下载安装就好. 添加源 ...
- 第五章 JavaScript对象及初识面向对象
第五章 JavaScript对象及初识面向对象 一.对象 在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. 在JavaScript对象分为内置对象和自定义对象,要处理一些 ...