codevs1796 社交网络

Description

在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题。

在一个社交圈子里有n个人,人与人之间有不同程度的关系。我们将这个关系网络对应到一个n个结点的无向图上,

两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值c,c越小,表示两个人

之间的关系越密切。我们可以用对应结点之间的最短路长度来衡量两个人s和t之间的关系密切程度,注意到最短路

径上的其他结点为s和t的联系提供了某种便利,即这些结点对于s和t之间的联系有一定的重要程度。我们可以通过

统计经过一个结点v的最短路径的数目来衡量该结点在社交网络中的重要程度。考虑到两个结点A和B之间可能会有

多条最短路径。我们修改重要程度的定义如下:令Cs,t表示从s到t的不同的最短路的数目,Cs,t(v)表示经过v从s

到t的最短路的数目;则定义

为结点v在社交网络中的重要程度。为了使I(v)和Cs,t(v)有意义,我们规定需要处理的社交网络都是连通的无向图

,即任意两个结点之间都有一条有限长度的最短路径。现在给出这样一幅描述社交网络的加权无向图,请你求出每

一个结点的重要程度。

Input

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

。接下来m行,每行用三个整数a,b,c描述一条连接结点a和b,权值为c的无向边。注意任意两个结点之间最多有

一条无向边相连,无向图中也不会出现自环(即不存在一条无向边的两个端点是相同的结点)。n≤100;m≤4500

,任意一条边的权值 c 是正整数,满足:1≤c≤1000。所有数据中保证给出的无向图连通,且任意两个结点之间

的最短路径数目不超过 10^10

Output

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

Sample Input

4 4
1 2 1
2 3 1
3 4 1
4 1 1

Sample Output

1.000
1.000
1.000
1.000

HINT

社交网络如下图所示。

对于 1 号结点而言,只有 2 号到 4 号结点和 4 号到 2 号结点的最短路经过 1 号结点,而 2 号结点和 4 号结

点之间的最短路又有 2 条。因而根据定义,1 号结点的重要程度计算为 1/2 + 1/2 = 1 。由于图的对称性,其他

三个结点的重要程度也都是 1 。

正解:floyd

解题报告:

  n<=100,想怎么乱搞怎么乱搞。。。

  floyd求出两点间的最短路,顺便统计一下有多少条不同的最短路。

  然后第二遍再做的时候,按照定义统计一下每个结点的重要度ans[i],如果经过k存在i到j的最短路,那么ans[k]需要加入这次的贡献,顺便统计一下就可以了。

 1 //It is made by jump~
 2 #include <iostream>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cstdio>
 6 #include <cmath>
 7 #include <algorithm>
 8 #include <ctime>
 9 #include <vector>
10 #include <queue>
11 #include <map>
12 #include <set>
13 #ifdef WIN32
14 #define OT "%I64d"
15 #else
16 #define OT "%lld"
17 #endif
18 using namespace std;
19 typedef long long LL;
20 const int MAXN = 150;
21 int n,m;
22 int w[MAXN][MAXN];
23 double num[MAXN][MAXN];
24 double ans[MAXN];
25
26 inline int getint()
27 {
28        int w=0,q=0;
29        char c=getchar();
30        while((c<‘0‘ || c>‘9‘) && c!=‘-‘) c=getchar();
31        if (c==‘-‘)  q=1, c=getchar();
32        while (c>=‘0‘ && c<=‘9‘) w=w*10+c-‘0‘, c=getchar();
33        return q ? -w : w;
34 }
35
36 inline void work(){
37     n=getint(); m=getint(); int x,y,z;
38     memset(w,127/3,sizeof(w));
39     for(int i=1;i<=m;i++) {
40     x=getint(); y=getint(); z=getint();
41     w[x][y]=w[y][x]=z; num[x][y]=num[y][x]=1;
42     }
43     for(int k=1;k<=n;k++)
44     for(int i=1;i<=n;i++)
45         if(i!=k)
46         for(int j=1;j<=n;j++)
47             if(j!=k && j!=i) {
48             if(w[i][j]>w[i][k]+w[k][j]) {
49                 w[i][j]=w[i][k]+w[k][j];
50                 num[i][j]=num[i][k]*num[k][j];
51             }
52             else if(w[i][j]==w[i][k]+w[k][j]) num[i][j]+=num[i][k]*num[k][j];
53             }
54
55     for(int k=1;k<=n;k++)
56     for(int i=1;i<=n;i++) if(i!=k)
57         for(int j=1;j<=n;j++)
58         if(j!=k && j!=i) {
59             if(w[i][j]==w[i][k]+w[k][j]) ans[k]+=((num[i][k]*num[k][j])/num[i][j]);//作为这一对点的中转点重要程度贡献
60         }
61     for(int i=1;i<=n;i++) printf("%.3lf\n",ans[i]);
62 }
63
64 int main()
65 {
66   work();
67   return 0;
68 }
时间: 2024-12-10 07:48:05

codevs1796 社交网络的相关文章

luogu P2047 社交网络

P2047 社交网络 2017-09-17 题目描述 在社交网络(social network)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有n个人,人与人之间有不同程度的关系.我 们将这个关系网络对应到一个n个结点的无向图上,两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值c,c越小,表示两 个人之间的关系越密切. 我们可以用对应结点之间的最短路长度来衡量两个人s和t之间的关系密切程度,注意到最短路径上的其他结点为s和

bzoj1491 [NOI2007]社交网络

Description 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有n个人,人与人之间有不同程度的关系.我们将这个关系网络对应到一个n个结点的无向图上,两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值c,c越小,表示两个人之间的关系越密切.我们可以用对应结点之间的最短路长度来衡量两个人s和t之间的关系密切程度,注意到最短路径上的其他结点为s和t的联系提供了某种便利,即这些结点对于

bzoj 1491: [NOI2007]社交网络

Description 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题. 在一个社交圈子里有n个人,人与人之间有不同程度的关系.我们将这个关系网络对应到一个n个结点的无向图上, 两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值c,c越小,表示两个人 之间的关系越密切.我们可以用对应结点之间的最短路长度来衡量两个人s和t之间的关系密切程度,注意到最短路 径上的其他结点为s和t的联系提供了某种便利,即这些

社会友谊和人群移动:基于位置的社交网络中的用户移动(一)

原文标题:Friendship and Mobility: User Movement In Location-Based Social Networks 作者单位:斯坦福大学    发表日期:2011年 会议:第十七届 ACM SIGKDD 国际会议--知识发现和数据挖掘 引用:Cho E, Myers S A, Leskovec J. Friendship and mobility: user movement in location-based social networks[C]// P

基于社交网络的情绪化分析II

基于社交网络的情绪化分析II By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 上一篇进行了微博数据的抓取,这一篇进行数据的处理介绍. 无意义微博的定义 观察发现微博中有很多的微博是用户参与某些活动而转发的微博,比如:"SmashHit,作者:MediocreAB.推荐!"http://t.cn/8Fkgg9k":"刚刚下载了豆丁文档:项目公司运营简报模板"http://t.cn/RPjFZKf&qu

可怕!社交网络上瘾者的大脑是这个样子的

电子科技的迅猛发展使越来越多的人开始使用社交网站,对于许多用户来说,他们对社交网站保持着一种执着的好奇心,瞪大眼睛探索着网络上的大千世界.但事实证明,这种"社交网瘾"的行为其实会在大脑中显现出来:一项新的研究发现,这种大脑强迫性驱使人不断登陆社交网站的行为,其实和吸毒上瘾的行为十分相似. 然而,这仅仅是相似而已,并不是完全的一样:这些有社交网瘾的用户,他们大脑的脉冲系统活动更加活跃,但是这片脑区却又能很好的抑制他们冲动的行为,这点便与***瘾君子的大脑不同.加州州立大学的心理学家奥菲尔

企业社交网络正在催生新的知识

短短几年,企业社交网络就成为一种影响深远的社会和经济现象.用户用微博.微信来沟通并分享内容,参与网络社区.组织活动.获取他人建议和经验,这一切规模庞大且没有边界的限制.社交网络是互联网上使用最多的功能,94%的人利用它进行学习,78%的人利用它分享知识,49%的人利用它与专家互动.每天有20亿的社会连接,超过30多亿的社交消息,企业社交网络正在催生新的知识经济. 然而最近通过朋友了解很多有关社交网络的问题,看了几个网站的评价好像还不错,可是我还是觉得这些企业社交网站有什么区别呢.然而开始一步步的

Spark Graphx图计算案例实战之aggregateMessages求社交网络中的最大年纪追求者和平均年纪!

Spark Graphx提供了mapReduceTriplets来对图进行聚合计算,但是1.2以后不再推荐使用,源代码如下: @deprecated("use aggregateMessages", "1.2.0") def mapReduceTriplets[A: ClassTag](     mapFunc: EdgeTriplet[VD, ED] => Iterator[(VertexId, A)],     reduceFunc: (A, A) =&g

浅谈社交网络中的用户心理

为什么在国内外的App排行榜中,占大多数的一直都是社交网络类的应用,因为社交网络是用户沟通和交流的真实反映,尽管社交网络平台存在着这样那样的虚假信息,但是从整体来看,社交网络能够反映大多数人的沟通交流,在沟通交流中能够较为真实地体现出用户的习惯,同时,要想社交和开发出更加适合用户的的社交网络产品和应用,则更需要从用户的心理层面上去把握. 第 一,社交网络中用户的隐私.不管是在PC还是移动端,我们都在使用社交网络,虽然很多用户会喜欢将自己的资料.信息存储在社交平台当中,但是也经常出现各 种网络数据