题目描述

在社交网络 ( Social Network ) 的研究中,我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题:
在一个社交圈子里有 nn 个人,人与人之间有不同程度的关系。我们将这个关系网络对应到一个 nn 个结点的无向图上,两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值 cc ,cc 越小,表示两个人之间的关系越密切。我们可以用对应结点之间的最短路长度来衡量两个人 ss 和 tt 之间的关系密切程度,注意到最短路径上的其他结点为 ss 和 tt 的联系提供了某种便利,即这些结点对于 ss 和 tt 之间的联系有一定的重要程度。我们可以通过统计经过一个结点 vv 的最短路径的数目来衡量该结点在社交网络中的重要程度。考虑到两个结点 AA 和 BB 之间可能会有多条最短路径。我们修改重要程度的定义如下:令 C_{s,t}Cs,t​ 表示从s到t的不同的最短路的数目,C_{s,t}(v)Cs,t​(v) 表示经过 vv 从 ss 到 tt 的最短路的数目;则定义:

为结点 vv 在社交网络中的重要程度。为了使 I(v)I(v) 和 C_{s,t}(v)Cs,t​(v) 有意义,我们规定需要处理的社交网络都是连通的无向图,即任意两个结点之间都有一条有限长度的最短路径。现在给出这样一幅描述社交网络的加权无向图,请你求出每一个结点的重要程度。

输入输出格式

输入格式:

输入第一行有两个整数 nn 和 mm ,表示社交网络中结点和无向边的数目。

在无向图中,我们将所有结点从 11 到 nn 进行编号。

接下来 mm 行,每行用三个整数 a , b , ca,b,c 描述一条连接结点 aa 和 bb ,权值为 cc 的无向边。 注意任意两个结点之间最多有一条无向边相连,无向图中也不会出现自环(即不存在一条无向边的两个端点是相同的结点)。

输出格式:

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

输入输出样例

输入样例#1: 复制

4 4
1 2 1
2 3 1
3 4 1
4 1 1
输出样例#1: 复制

1.000
1.000
1.000
1.000

说明

对于1号结点而言,只有2号到4号结点和4号到2号结点的最短路经过1号结点,而2号结点和4号结点之间的最短路又有2条。因而根据定义,1号结点的重要程度计算为1/2+1/2=1。由于图的对称性,其他三个结点的重要程度也都是1。

对于 50\%50% 的数据, n \le 10 , m \le 45n≤10,m≤45。
对于 100\%100% 的数据, n \le 100 , m \le 4500n≤100,m≤4500 ,任意一条边的权值 cc 是正整数且 1 \leqslant c \leqslant 10001⩽c⩽1000 。
所有数据中保证给出的无向图连通,且任意两个结点之间的最短路径数目不超过 10^{10}1010。

解析:

a:是图的邻接矩阵,d是图中任意两点直接的最短距离、c记录两点间最短路径的数目,f[v]记录经过v点的重要程度。


floyd算法:
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
利用floyd算法求两点间最短路径的数目
 if(d[i][j]>d[i][k]+d[k][j]){
d[i][j]=d[i][k]+d[k][j];
c[i][j]=c[i][k]*c[k][j];
}
else if(d[i][j]==d[i][k]+d[k][j]){
c[i][j]+=c[i][k]*c[k][j];
}

floyd后,再求每个点的重要程度:

 if(c[i][j]&&d[i][j]==d[i][k]+d[k][j])
f[k]+=double(c[i][k]*c[k][j])/c[i][j];
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m;
const int maxn=;
long long a[maxn][maxn],d[maxn][maxn],c[maxn][maxn];//注意数据类型
double f[maxn];
void floy(){
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) d[i][j]=a[i][j];
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(d[i][j]>d[i][k]+d[k][j]){
d[i][j]=d[i][k]+d[k][j];
c[i][j]=c[i][k]*c[k][j];
}
else if(d[i][j]==d[i][k]+d[k][j]){
c[i][j]+=c[i][k]*c[k][j];
}
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(c[i][j]&&d[i][j]==d[i][k]+d[k][j])
f[k]+=double(c[i][k]*c[k][j])/c[i][j]; }
int main(){
cin>>n>>m;
memset(a,0x3f,sizeof(a));
for(int i=;i<=n;i++) a[i][i]=;
for(int i=;i<=m;i++){
int x,y,w;
cin>>x>>y>>w;
a[x][y]=a[y][x]=w;
c[x][y]=c[y][x]=;
}
floy();
for(int i=;i<=n;i++)
printf("%.3lf\n",f[i]);
return ;
}

P2047 [NOI2007]社交网络(洛谷)的更多相关文章

  1. 洛谷 P2047 [NOI2007]社交网络 解题报告

    P2047 [NOI2007]社交网络 题目描述 在社交网络(\(social\) \(network\))的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有\ ...

  2. 洛谷——P2047 [NOI2007]社交网络

    P2047 [NOI2007]社交网络 $Floyd$,一眼看到就是他(博主是不小心瞄到了这个题的标签吧qwq) 这个题目只要预处理出$S$到$T$的最短路的条数即可,类似$Spfa$的更新方法 如果 ...

  3. 洛谷P2047 [NOI2007]社交网络 [图论,最短路计数]

    题目传送门 社交网络 题目描述 在社交网络(social network)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有n个人,人与人之间有不同程度的关系. ...

  4. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  5. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  6. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  7. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  8. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  9. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

随机推荐

  1. centos 6升级 GCC 到4.8

    centos 6升级 GCC 到4.8   安装最新版本的swoole 提示 pecl install swolle ... GCC 4.8 or later required. 首先想到的时候yum ...

  2. 【Zookerper】 安装开启

    一.Windows环境 1.1 下载和安装: 1.2 开启 1.3 关闭 1.4 用客户端连接 二.Linux 环境 一.Windows环境 1.1 下载和安装: 环境要求:必须要有jdk环境 1.安 ...

  3. 【问题】使用XShell连接Debian,没有语法高亮

    编辑家目录里面的.bashrc文件,取消红框中的注释. 我使用的是XShell连接Debian,有的人可能改完也没有语法高亮,试着改下XShell的配色方案 参考:https://www.cnblog ...

  4. 安装sass时遇到Failed to build gem native extension

    错误信息 执行命令: sudo gem install sass时遇到下面的错误信息 Building native extensions. This could take a while... ER ...

  5. Spring的使用及Spring3.2控制器增强@ControllerAdvice

    在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component. @Controller.@Service等这些注解的类,则把这 ...

  6. 【python】获取目录下的最新文件夹/文件

    直接上代码 def new_report(test_report): lists = os.listdir(test_report) #列出目录的下所有文件和文件夹保存到lists print(lis ...

  7. es相关

    1.es在数据量很大的情况下(数十亿级别)如何提高查询性能啊? 2.es生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片? 3.es的分布式架构原理能说一下么(es是如何 ...

  8. 【1 封新邀请】想跟谷歌、七牛、kyligence 等大佬面对面的交流吗?

    2020 年 1 月 4 日 - 5 日,"ECUG Con 2020"大会将于杭州举行.本次大会以"ECUG For Future"为主题,围绕五大技术主题, ...

  9. 日常note

    1.插入使相同的最少次数 给定两个序列A,B 每次只能进行把一个元素插入特定位置的操作 求至少对A进行多少次才能使A等于B 设A,B的长度为Len,那么答案为 \(Len-LCS(A,B)\) 2.\ ...

  10. Google-Guava Concurrent包里的Service框架浅析

    原文地址  译文地址 译者:何一昕 校对:方腾飞 概述 Guava包里的Service接口用于封装一个服务对象的运行状态.包括start和stop等方法.例如web服务器,RPC服务器.计时器等可以实 ...