洛谷 P2047 [NOI2007]社交网络 解题报告
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]社交网络 解题报告的更多相关文章
- 洛谷——P2047 [NOI2007]社交网络
P2047 [NOI2007]社交网络 $Floyd$,一眼看到就是他(博主是不小心瞄到了这个题的标签吧qwq) 这个题目只要预处理出$S$到$T$的最短路的条数即可,类似$Spfa$的更新方法 如果 ...
- 洛谷 P4027 [NOI2007]货币兑换 解题报告
P4027 [NOI2007]货币兑换 题目描述 小 \(Y\) 最近在一家金券交易所工作.该金券交易所只发行交易两种金券:\(A\) 纪念券(以下简称 \(A\) 券)和 \(B\) 纪念券(以下简 ...
- 洛谷P2047 [NOI2007]社交网络 [图论,最短路计数]
题目传送门 社交网络 题目描述 在社交网络(social network)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有n个人,人与人之间有不同程度的关系. ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- BZOJ1491 洛谷2047 NOI2007 社交网络
Description: 在社交网络(social network)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有n个人,人与人之间有不同程度的关系.我 们 ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
- 洛谷 P3177 树上染色 解题报告
P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...
随机推荐
- jquery方法简单记录
append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被选元素之前插入内容 firs ...
- 9.Libraries and visibility 库和可见性
import和liabrary指令可以帮助你创建模块化,可复用的代码.库不仅仅提供API,也是一个私有化单元:库中已下划线(_)开头的类都是对外不可访问的.每个Dart的应用也是一个包,尽管它没有使用 ...
- 20155316 Exp1 PC平台逆向破解(5)M
前绪 实验收获与感想 初步从三个途径了解了什么是缓冲区溢出以及如何简单实现它,对汇编与反汇编有更直观的了解. 什么是漏洞?漏洞有什么危害? 漏洞是指机器体制设计时所没有顾及到的.可以被利用的bug,放 ...
- 2017-2018-2 20155333 《网络对抗技术》 Exp1 PC平台逆向破解
2017-2018-2 20155333 <网络对抗技术> Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行 ...
- 20155338课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现
课程设计个人报告--基于ARM实验箱的Android交友软件的设计与实现 个人贡献 实验环境的搭建 代码调试 在电脑上成功运行 研究程序代码撰写小组报告 一.实验环境 1.Eclipse软件开发环境: ...
- [Deep-Learning-with-Python]计算机视觉中的深度学习
包括: 理解卷积神经网络 使用数据增强缓解过拟合 使用预训练卷积网络做特征提取 微调预训练网络模型 可视化卷积网络学习结果以及分类决策过程 介绍卷积神经网络,convnets,深度学习在计算机视觉方面 ...
- idea git pull项目到本地时容易出现的问题
有时候pull到本地,出了各种错误,其实是因为搞来搞去的,容易出问题,所以最好的方法是拿原有打包好的整个稳定能跑的项目环境, 先git add,然后vcs重置head为hard,然后再pull,一般就 ...
- 第十五次ScrumMeeting博客
第十五次ScrumMeeting博客 本次会议于12月4日(一)22时整在3公寓725房间召开,持续30分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和 ...
- PAT甲题题解-1039. Course List for Student (25)-建立映射+vector
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789157.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...