洛谷 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\)个点,将其染成黑色, ...
随机推荐
- sql语句之随机查询记录和批量插入--基于mysql
本周遇到了好几次数据库方面的问题,一个是上一篇文章提到的因为要修改数据结构引起的在表间复制字段的需求,另一个就是这篇文章要写的:1,从某个数据表中按照某个字段不重复的随机选取几百条记录:2,然后把这些 ...
- 20155308『网络对抗技术』Exp7:网络欺诈防范
20155308『网络对抗技术』Exp7:网络欺诈防范 原理与实践说明 1.实践目标 本实践的目标是:理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 2.实践内容概述 简单应用SET ...
- 20155321 《网络攻防》 Exp4 恶意代码分析
20155321 <网络攻防> Exp4 恶意代码分析 计划任务监控 在C盘根目录下建立一个netstatlog.bat文件(先把后缀设为txt,保存好内容后记得把后缀改为bat),内容如 ...
- python3获取主机名、主机IP
python3可以通过socket模块获取主机名及主机IP 代码如下: *********************************************************** 学习永远 ...
- pt-online-schema-change的实现原理
pt-online-schema-change用于MySQL的在线DDL. 下面结合官方文档和general log来分析其实现原理. 测试表 mysql> show create table ...
- 【ORACLE】Win2008R2修改oracle数据库实例名
需求说明:要求将windows平台的数据库实例名由orcl改为haha 参考: https://www.cnblogs.com/junnor/archive/2013/03/05/2945245.ht ...
- CSS快速入门-前端布局1(抽屉)
一.效果图 前面对CSS基础知识有了一定的了解,是时候开始实战了!以下我对抽屉(https://dig.chouti.com/)主页进行模拟布局. 官方网站效果图: 模拟网站图: 二.实现步骤 1.整 ...
- TDD 与 CI 在 Python 中的实践
社区化产品的长久生存之道可能莫过于对迭代周期的控制.还记得以前采用老土的阶段开发的年代,将软件生命周期分为各个阶段,当到达每个阶段的里程碑则集中所有的资源.人力作全面冲刺.每次到了里程碑的检查点冲过了 ...
- Jq_打印
利用IE自带的WebBrowser进行打印 打印判断: if(factory.object)//打印设置的判断 factory.printing.PageSetup(); else alert(& ...
- Docker swarm集群搭建教程
一.什么是Swarm Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行为.比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavio ...