P2047 [NOI2007]社交网络

题目描述

在社交网络(\(social\) \(network\))的研究中,我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题。在一个社交圈子里有\(n\)个人,人与人之间有不同程度的关系。我 们将这个关系网络对应到一个\(n\)个结点的无向图上,两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值\(c\),\(c\)越小,表示两 个人之间的关系越密切。

我们可以用对应结点之间的最短路长度来衡量两个人\(s\)和\(t\)之间的关系密切程度,注意到最短路径上的其他结点为\(s\)和\(t\)的联系提供了某种便利, 即这些结点对于\(s\)和\(t\)之间的联系有一定的重要程度。我们可以通过统计经过一个结点\(v\)的最短路径的数目来衡量该结点在社交网络中的重要程度。

考虑到两个结点\(A\)和\(B\)之间可能会有多条最短路径。我们修改重要程度的定义如下:

令\(C_{s,t}\)表示从\(s\)到\(t\)的不同的最短路的数目,\(C_{s,t(v)}\)表示经过\(v\)从\(s\)到\(t\)的最短路的数目;则定义

\(I(v)=\sum_{s!=v,t!=v} C_{s,t(v)}/C_{s,t}\)

为结点\(v\)在社交网络中的重要程度。

为了使\(I(v)\)和\(C_{s,t(v)}\)有意义,我们规定需要处理的社交网络都是连通的无向图,即任意两个结点之间都有一条有限长度的最短路径。

现在给出这样一幅描述社交网络s的加权无向图,请你求出每一个结点的重要程度。

输入输出格式

输入格式:

输入第一行有两个整数,\(n\)和\(m\),表示社交网络中结点和无向边的数目。在无向图中,我们将所有结点从1到\(n\)进行编号。

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

输出格式:

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


这是一道最短路计数+枚举的题目。

提供一种disj的最短路计数思路。

当某个点已经松弛完毕,去松弛其他点时,若松弛成功,则将计数改为这个点的计数,若不成功但权值与对方相等,则把自己的计数加上去。

最后枚举每个点,看是否在\(s,t\)的最短路上,如果在,用乘法原理计算即可。


Code:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#define P pair<int,int >
#define ll long long
using namespace std;
const int N=102;
const int M=9020;
int head[N],edge[M],to[M],next[M],cnt0;
void add(int u,int v,int w)
{
to[++cnt0]=v;edge[cnt0]=w;next[cnt0]=head[u];head[u]=cnt0;
to[++cnt0]=u;edge[cnt0]=w;next[cnt0]=head[v];head[v]=cnt0;
}
priority_queue <P,vector <P >,greater<P> > q;
P p;int n,m;ll cnt[N][N];
int dis[N][N],used[N];
void disj(int s)
{
memset(used,0,sizeof(used));
dis[s][s]=0;
cnt[s][s]=1;
p.first=0,p.second=s;
q.push(p);
while(!q.empty())
{
int u=q.top().second;
q.pop();
if(used[u]) continue;
used[u]=1;
for(int i=head[u];i;i=next[i])
{
int v=to[i],w=edge[i];
if(dis[s][v]>dis[s][u]+w)
{
dis[s][v]=dis[s][u]+w;
cnt[s][v]=cnt[s][u];
p.first=dis[s][v],p.second=v;
q.push(p);
}
else if(dis[s][v]==dis[s][u]+w)
cnt[s][v]+=cnt[s][u];
}
}
cnt[s][s]=0;
}
int main()
{
scanf("%d%d",&n,&m);
int u,v,w;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
memset(dis,0x3f,sizeof(dis));
for(int i=1;i<=n;i++)
disj(i);
for(int k=1;k<=n;k++)
{
double ans=0.0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(cnt[i][j]&&dis[i][k]+dis[k][j]==dis[i][j])
ans+=double(cnt[i][k]*cnt[k][j])/double(cnt[i][j]);
printf("%.3lf\n",ans);
}
return 0;
}

2018.7.1

洛谷 P2047 [NOI2007]社交网络 解题报告的更多相关文章

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

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

  2. 洛谷 P4027 [NOI2007]货币兑换 解题报告

    P4027 [NOI2007]货币兑换 题目描述 小 \(Y\) 最近在一家金券交易所工作.该金券交易所只发行交易两种金券:\(A\) 纪念券(以下简称 \(A\) 券)和 \(B\) 纪念券(以下简 ...

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

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

  4. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  5. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  6. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  7. BZOJ1491 洛谷2047 NOI2007 社交网络

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

  8. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

  9. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

随机推荐

  1. MySQL学习笔记04 插入中文时出现ERROR 1366 (HY000)

    1 环境: MySQL Server 6.0  命令行工具 2 问题 :  插入中文字符数据出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\ ...

  2. web安全入门课程笔记——SQL漏洞分析与利用

    3-1SQL语言基础 3-2ACCESS手工注入 And1=1是什么意思:进入数据库查询信息,判断是否存在注入点. Exists(select*from admin):查询语句 3-6MySQL手工注 ...

  3. 20155211 Exp5 MSF基础应用

    20155211 Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit:漏洞攻击.一个exploit程序肯定会触发系统的一个或多个 ...

  4. 20155318 Exp1 PC平台逆向破解(5)M

    20155318 Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入 ...

  5. 11.8 开课二个月零四天 (Jquery)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 升级webpack2

    更新:webpack3已经出来了,官方说从2到升级到3不用改一行配置,98%的人没有错误. 项目中用的是webpack1.webpack2已经出来一段时间了.决定升级.其实改动不是很大.修改加测试共花 ...

  7. ubuntu 桌面操作系统安装WPS办公软件的方法

    1.打开ubuntu系统自带的firefox软件 2.打开linux.wps.cn,并点击立即下载 3. 点击下载deb安装包 4.进入下载目录,sudo dpkg -i wps-office_10. ...

  8. pycharm如何全局进行查找一个关键词

    PyCharm的Find in Path功能提供了全局查找功能,快捷键为Ctrl + Shift + F.Find则是在当前文件查找,快捷键为Ctrl + F.这两个个功能非常实用. Find in ...

  9. react脚手架改造(react/react-router/redux/eslint/karam/immutable/es6/webpack/Redux DevTools)

    公司突然组织需要重新搭建一个基于node的论坛系统,前端采用react,上网找了一些脚手架,或多或少不能满足自己的需求,最终在基于YeoMan的react脚手架generator-react-webp ...

  10. centos 7 tomcat 开机自启

    第一章 1.将tomcat加入开启自己,以减少手动启动的麻烦 环境配置需要提前配置好.(我这里已经是不做操作了) 192.168.1.195 jdk1.8 +  tomcat 8 第二章 2.编写to ...