7-10 社交网络图中结点的“重要性”计算(30 point(s))

在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来。他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱。而结点根据其所处的位置不同,其在网络中体现的重要性也不尽相同。

“紧密度中心性”是用来衡量一个结点到达其它结点的“快慢”的指标,即一个有较高中心性的结点比有较低中心性的结点能够更快地(平均意义下)到达网络中的其它结点,因而在该网络的传播过程中有更重要的价值。在有N个结点的网络中,结点v​i​​的“紧密度中心性”Cc(v​i​​)数学上定义为v​i​​到其余所有结点v​j​​ (j≠i) 的最短距离d(v​i​​,v​j​​)的平均值的倒数:

对于非连通图,所有结点的紧密度中心性都是0。

给定一个无权的无向图以及其中的一组结点,计算这组结点中每个结点的紧密度中心性。

输入格式:

输入第一行给出两个正整数N和M,其中N(≤10​4​​)是图中结点个数,顺便假设结点从1到N编号;M(≤10​5​​)是边的条数。随后的M行中,每行给出一条边的信息,即该边连接的两个结点编号,中间用空格分隔。最后一行给出需要计算紧密度中心性的这组结点的个数K(≤100)以及K个结点编号,用空格分隔。

输出格式:

按照Cc(i)=x.xx的格式输出K个给定结点的紧密度中心性,每个输出占一行,结果保留到小数点后2位。

输入样例:

9 14

1 2

1 3

1 4

2 3

3 4

4 5

4 6

5 6

5 7

5 8

6 7

6 8

7 8

7 9

3 3 4 9

输出样例:

Cc(3)=0.47

Cc(4)=0.62

Cc(9)=0.35

思路

我们先把所有的边 先用并查集 并进去 再查找 判断一下 是不是连通图

如果不是 对于每个点的询问 直接输出 0.00 就可以了

然后 如果是 连通图的话

我们就从 那个点开始

BFS

对于每层 访问到的点 都权值 都加上 当前层数 就是这个点 到中心点的距离

AC代码

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <ctype.h>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <climits>
  7. #include <ctime>
  8. #include <iostream>
  9. #include <algorithm>
  10. #include <deque>
  11. #include <vector>
  12. #include <queue>
  13. #include <string>
  14. #include <map>
  15. #include <stack>
  16. #include <set>
  17. #include <numeric>
  18. #include <sstream>
  19. #include <iomanip>
  20. #include <limits>
  21. #define CLR(a) memset(a, 0, sizeof(a))
  22. #define pb push_back
  23. using namespace std;
  24. typedef long long ll;
  25. typedef long double ld;
  26. typedef unsigned long long ull;
  27. typedef pair <int, int> pii;
  28. typedef pair <ll, ll> pll;
  29. typedef pair<string, int> psi;
  30. typedef pair<string, string> pss;
  31. const double PI = 3.14159265358979323846264338327;
  32. const double E = exp(1);
  33. const double eps = 1e-30;
  34. const int INF = 0x3f3f3f3f;
  35. const int maxn = 1e4 + 5;
  36. const int MOD = 1e9 + 7;
  37. vector <int> G[maxn];
  38. int pre[maxn];
  39. int find(int x)
  40. {
  41. while (x != pre[x])
  42. x = pre[x];
  43. return x;
  44. }
  45. void join(int x, int y)
  46. {
  47. int fx = find(x), fy = find(y);
  48. if (x != fy)
  49. pre[fx] = fy;
  50. }
  51. queue <int> q;
  52. int v[maxn];
  53. int tot;
  54. void bfs(int cur)
  55. {
  56. int len = q.size();
  57. for (int i = 0; i < len; i++)
  58. {
  59. int num = q.front();
  60. q.pop();
  61. vector <int>::iterator it;
  62. for (it = G[num].begin(); it != G[num].end(); it++)
  63. {
  64. if (v[(*it)] == 0)
  65. {
  66. q.push(*it);
  67. tot += cur;
  68. v[(*it)] = 1;
  69. }
  70. }
  71. }
  72. if (q.size())
  73. bfs(cur + 1);
  74. }
  75. void init()
  76. {
  77. for (int i = 0; i < maxn; i++)
  78. pre[i] = i;
  79. }
  80. int main()
  81. {
  82. init();
  83. int n, m;
  84. scanf("%d%d", &n, &m);
  85. int x, y;
  86. for (int i = 0; i < m; i++)
  87. {
  88. scanf("%d%d", &x, &y);
  89. G[x].pb(y);
  90. G[y].pb(x);
  91. join(x, y);
  92. }
  93. int flag = 1;
  94. int vis = find(1);
  95. for (int i = 2; i <= n; i++)
  96. {
  97. if (find(i) != vis)
  98. {
  99. flag = 0;
  100. break;
  101. }
  102. }
  103. if (flag == 0)
  104. {
  105. int k, num;
  106. scanf("%d", &k);
  107. for (int i = 0; i < k; i++)
  108. {
  109. scanf("%d", &num);
  110. printf("Cc(%d)=0.00\n", num);
  111. }
  112. }
  113. else
  114. {
  115. int k, num;
  116. scanf("%d", &k);
  117. for (int i = 0; i < k; i++)
  118. {
  119. scanf("%d", &num);
  120. CLR(v);
  121. while (!q.empty())
  122. q.pop();
  123. q.push(num);
  124. v[num] = 1;
  125. tot = 0;
  126. bfs(1);
  127. double ans = (n - 1) * 1.0 / tot;
  128. printf("Cc(%d)=%.2lf\n", num, ans);
  129. }
  130. }
  131. }

7-10 社交网络图中结点的“重要性”计算(30 point(s)) 【并查集+BFS】的更多相关文章

  1. 社交网络图中结点的“重要性”计算 (30 分) C++解法

    社交网络图中结点的"重要性"计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓 ...

  2. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

  3. PTA 社交网络图中结点的“重要性”计算(30 分)

    7-12 社交网络图中结点的“重要性”计算(30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互 ...

  4. PTA 7-12(图) 社交网络图中结点的“重要性”计算 最短路

    7-12(图) 社交网络图中结点的“重要性”计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的 ...

  5. 7-11 社交网络图中结点的“重要性”计算 (30 分)(Dijkstra算法)

    题意:  思路:对每个输入的点跑一遍dijkstra算法,然后对这个点到所有点的距离求和按公式输出就可以了. (这次尝试了用数组模拟链表来做最短路问题,刷新了自己对最短路的理解) 这里构造链表的过程我 ...

  6. 測试oracle 11g cluster 中OLR的重要性

     測试oracle 11g cluster 中OLR的重要性 called an Oracle Local Registry (OLR): each node in a cluster has a ...

  7. C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

    在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用 ...

  8. Windows 10 版本 1507 中的新 AppLocker 功能

    要查看 Windows 10 版本信息,使用[运行]> dxdiag  回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...

  9. OS X EI Capitan 10.11.4中sudo无法起作用的解决方法

    mac升级到OSX EI Capitan 10.11.4后sudo命令无法起作用,执行任何操作总是显示Operation denied.这是因为在10.11.4中引入了Rootless机制,即就算是R ...

随机推荐

  1. Integration_Unit test coding standard

    Integration & Unit test coding standard 命名规则 好的命名规则,直接从命名就可以清楚的知道该测试方法测试的内容和目的,而不用额外的添加注释说明.对于MV ...

  2. 洛谷——P1988 火炬

    P1988 火炬 题目描述 2008北京奥运会,你想成为四川汶川的一名火炬手,经过层层选拔,终于到了最后一关,这一关是一道很难的题:任意给定一个正整数N(N<=100000),求一个最小的正整数 ...

  3. 安装部署k8s-版本-1.13

    1.环境准备 # 统一hosts cat /etc/hosts 10.0.0.10 k8s-master 10.0.0.20 k8s-node1 10.0.0.30 k8s-node2 # 同步时间 ...

  4. Codeforces Gym 100338H High Speed Trains 组合数学+dp+高精度

    原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...

  5. Java定义接口变量为接收类型有什么好处(面向接口编程)

    个人理解:定义接口变量为接收类型属于面向接口的编程,通过接口的抽象能减少类之间的耦合,增加可复用性. 面向接口编程: 一种规范约束 制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者 ...

  6. [simple-orm-mybaits]基于Mybatis的ORM封装介绍

    目录 前言 ORM框架现状 Mybatis优缺点 simple-orm-mybatis设计思路介绍 simple-orm-mybatis使用说明 simple-orm-mybatis实际使用 推荐最佳 ...

  7. django忘记超级用户密码的解决方法

    用Django shell: 1 python manage.py shell 然后获取你的用户名,并且重设密码: 1 2 3 4 from django.contrib.auth.models im ...

  8. linux 设置ssh密钥登录

    一.查看服务器上是否开启了sshd服务 要确认linux是不是安装了和开启了ssh服务可以输入 netstat -an|grep 22,查看22端口是否打开,如果找开,则证明SSH服务开启了. ps ...

  9. basePath 方便

    String path = request.getContextPath()+"/";String basePath = request.getScheme() + ": ...

  10. CrtmpServer 接收推送视频流 注册流基本流程

    今天研究了CrtmpServer 将客户端推动过来的视频流注册到服务的流程,记录下来,以备后用. 图1 注册前端视频流流程