这题是某年成都区域赛网络赛的一题。

这题思路非常easy,可是从时间上考虑,不妨不要用矩阵存储,我用的链式前向星。

採用线上查询。利用map对字符串编号,由于非常方便。要推荐的朋友,事实上就是朋友的朋友(这里指的是直接朋友,图中即指有直接边相连的)。

所以在寻找时,仅仅须要查找朋友的朋友,并计数。

注意:在输出时不能有对于的空格。

附代码:

  1. #include<iostream>
  2. using namespace std;
  3. #include<cstdio>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<map>
  7. #include<algorithm>
  8.  
  9. int n,m;
  10. char s11[20],s22[20];
  11. string g[20100],l[20100];
  12. int next[201000],head[2010],key[201000];
  13. int num;
  14.  
  15. void add(int u,int v)
  16. {
  17. key[num]=v;
  18. next[num]=head[u];
  19. head[u]=num++;
  20. }
  21.  
  22. int main()
  23. {
  24. int T,pp=0;
  25. scanf("%d",&T);
  26. while (T--)
  27. {
  28. map<string,int> hash;
  29. int n,m,i,j,k;
  30. string s1,s2;
  31. int cnt=0;
  32.  
  33. num=0;
  34.  
  35. scanf("%d%d",&n,&m);
  36. memset(head,-1,sizeof(head));
  37.  
  38. for (i=0;i<n;++i)
  39. {
  40. scanf("%s%s",s11,s22);
  41. s1=string(s11);
  42. s2=string(s22);
  43. if (hash[s1]==0)
  44. hash[s1]=++cnt,l[cnt]=s1;
  45. if (hash[s2]==0)
  46. hash[s2]=++cnt,l[cnt]=s2;
  47.  
  48. add(hash[s1],hash[s2]);
  49. add(hash[s2],hash[s1]);
  50. }
  51. printf("Case %d:\n",++pp);
  52.  
  53. for (i=0;i<m;++i)
  54. {
  55. scanf("%s",s11);
  56. s1=string(s11);
  57. int p=hash[s1];
  58. int f[20100],flag[20010];
  59. memset(f,0,sizeof(f));
  60. memset(flag,0,sizeof(flag));
  61.  
  62. for (k=head[p];k!=-1;k=next[k]) flag[key[k]]=-1;
  63.  
  64. for (k=head[p];k!=-1;k=next[k])
  65. if (key[k]!=p)
  66. {
  67. for (j=head[key[k]];j!=-1;j=next[j])
  68. if (key[j]!=key[k] && key[j]!=p && flag[key[j]]==0)
  69. {
  70. f[key[j]]++;
  71. }
  72. }
  73. int Max=-1;
  74. for (k=1;k<=cnt;++k)
  75. {
  76. Max=max(Max,f[k]);
  77. // printf("%d\n",f[k]);
  78. }
  79. if (Max==0)
  80. {
  81. printf("-\n");
  82. continue;
  83. }
  84. int q=0;
  85. for (k=1;k<=cnt;++k)
  86. if (Max==f[k])
  87. {
  88. g[q++]=l[k];
  89. }
  90. sort(g,g+q);
  91. for (k=0;k<q-1;++k) cout << g[k] << " ";
  92. cout << g[q-1];
  93. cout << endl;
  94. }
  95.  
  96. }
  97.  
  98. return 0;
  99. }

36th成都区域赛网络赛 hdoj4039 The Social Network(建图+字符串处理)的更多相关文章

  1. ACM总结——2017区域赛网络赛总结

    从省赛回来至今4周,每周周末都在打网络赛,每次都是划水,总结下自己弱弱的ACM吧!划水水~~ 首先是新疆赛区,基本上都是图论相关的东西,全靠队友,自己翻水水,实力躺了5道. 然后是沈阳赛区,终于有点贡 ...

  2. 2019 西电ACM校赛网络赛 题解

    今年题目难度有较大提升,总体与往年类似,数学题居多.以下为我通过的部分题解. 赛题链接:http://acm.xidian.edu.cn/contest.php?cid=1053 A - 上帝视角 我 ...

  3. 第八届河南省赛C.最少换乘(最短路建图)

    C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 94  Solved: 25 [Submit][Status][Web Board] De ...

  4. 2018ICPC徐州区域赛网络赛G(VECTOR+SET,模拟)

    #include<bits/stdc++.h>using namespace std;int x,y;vector<int>v1,v2;long long solve(vect ...

  5. 2018ICPC徐州区域赛网络赛B(逆序枚举或者正序深度搜索)

    #include<bits/stdc++.h>using namespace std;int n,m,k,l;int x[1007],y[1007],z[1007];int dp[1007 ...

  6. Fire Air(华科校赛 网络赛)

    题目 原题链接:https://www.nowcoder.com/acm/contest/106/L 在100000 * 10000的空地上,有n个时间点,每个时间点会在(xi,yi)上种一棵树. 定 ...

  7. Newnode's NOI(P?)模拟赛 第三题 (主席树优化建图 + tarjan)

    题目/题解戳这里 这道题题目保证a,b,ca,b,ca,b,c各是一个排列-mdzz考场上想到正解但是没看到是排列,相等的情况想了半天-然后写了暴力60分走人- 由于两两间关系一定,那么就是一个竞赛图 ...

  8. 4.15 省选模拟赛 编码 trie树 前缀和优化建图 2-sat

    好题 np. 对于20分 显然可以爆搜. 对于50分 可以发现每个字符串上的问号要么是0,要么是1.考虑枚举一个字符串当前是0还是1 这会和其他字符串产生矛盾. 所以容易 发现这是一个2-sat问题. ...

  9. poj 1144 Network 【求一个网络的割点的个数 矩阵建图+模板应用】

    题目地址:http://poj.org/problem?id=1144 题目:输入一个n,代表有n个节点(如果n==0就结束程序运行). 在当下n的这一组数据,可能会有若干行数据,每行先输入一个节点a ...

随机推荐

  1. (转)dedecms插件开发简明教程

    这篇文章主要为大家介绍了dedecms插件开发的方法,以实例形式对插件开发的步骤进行了详细的介绍,非常具有实用价值,需要的朋友可以参考下  原文:http://www.jb51.net/cms/230 ...

  2. Css四种样式

    1. 2 3 4 5 6.

  3. oracle解析xml完成版第二次修改

    其实XML字符串就好像是ORACLE中的外部表,因此Oracle对 解析XML字符串一些规则要求非常严格.XML字符串提供的数据就是一张表,所以Oracle必须提供跟 xml数据一致的列头 示例一 S ...

  4. MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  5. 四、C#方法和参数

    方法是一种组合一系列语句以执行一个特定操作或计算一个特殊结果的方式. 它能够为构成程序的语句提供更好的结构和组织.   在面向对象的语言中,方法总是和类关联在一起的,我们用类将相关的方法分为一组. 方 ...

  6. 你好,C++(33)对象生死两茫茫 6.2.3 一个对象的生与死:构造函数和析构函数

    6.2.2  使用类创建对象 完成某个类的声明并且定义其成员函数之后,这个类就可以使用了.一个定义完成的类就相当于一种新的数据类型,我们可以用它来定义变量,也就是创建这个类所描述的对象,表示现实世界中 ...

  7. Oauth支持的5类 grant_type 及说明

    authorization_code 授权码模式(即先登录获取code,再获取token) password 密码模式(将用户名,密码传过去,直接获取token) client_credentials ...

  8. C语言基础学习运算符-赋值运算符

    简单赋值 在C语言里,运算符=并不表示相等,而是一个赋值运算符.这意味着,符号=的左边该是一个可修改的变量名,而右边是赋给该变量的值. 如下程序语句: i = i+; 在数学上,该等式无法成立.而作为 ...

  9. IE下的firebug调试利器

    1. 文件调用 把下面js代码,包含在要调试的页面中. <script src="https://getfirebug.com/firebug-lite.js">< ...

  10. C#程序中将图片转换为byte数组,并将byte数组转换为图片

    /// <summary> /// 将图片以二进制流 /// </summary> /// <param name="path"></pa ...