题意:两人相互打电话(直接或间接),则在一个电话圈。即a给b打电话,b给c打电话,则a给c间接打电话。

注意:1、注意标记。2、注意输出格式。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<string>
  5. #include<sstream>
  6. #include<cctype>
  7. #include<cmath>
  8. #include<cstdlib>
  9. #include<algorithm>
  10. #include<stack>
  11. #include<queue>
  12. #include<deque>
  13. #include<set>
  14. #include<map>
  15. #include<list>
  16. using namespace std;
  17. const int MAXN=+;
  18. const int INF=0x7f7f7f7f;
  19. const double PI=acos(1.0);
  20. typedef long long ll;
  21. typedef unsigned long long llu;
  22. map<string,int> ma;
  23. char s1[],s2[];
  24. string s[];
  25. int d[][];
  26. int vis[];
  27. int n;
  28. int dfs(int w)//遍历,若在一个电话圈里,则输出,注意标记
  29. {
  30. vis[w]=;
  31. for(int i=; i<=n; i++)
  32. {
  33. if(!vis[i]&&d[w][i]&&d[i][w])
  34. {
  35. printf(", %s",s[i].c_str());//注意格式--空格
  36. vis[i]=;
  37. }
  38. }
  39. }
  40. int main()
  41. {
  42. int m;
  43. int cnt=;
  44. while(scanf("%d%d",&n,&m)==&&n&&m)
  45. {
  46. memset(d,,sizeof(d));
  47. memset(vis,,sizeof(vis));
  48. ma.clear();//!!!
  49. int cas=;
  50. while(m--)
  51. {
  52. scanf("%s%s",s1,s2);
  53. if(!ma.count(s1))//按输入顺序,依次给名字标号,并存进s
  54. {
  55. ma[s1]=++cas;
  56. s[cas]=string(s1);
  57. }
  58. if(!ma.count(s2))
  59. {
  60. ma[s2]=++cas;
  61. s[cas]=string(s2);
  62. }
  63. int i=ma[s1],j=ma[s2];
  64. d[i][j]=;
  65. }
  66. for(int k=; k<=n; k++)//有向图的传递闭包
  67. {
  68. for(int i=; i<=n; i++)
  69. {
  70. for(int j=; j<=n; j++)
  71. {
  72. d[i][j]=d[i][j]||(d[i][k]&&d[k][j]);
  73. }
  74. }
  75. }
  76. if(cnt)
  77. printf("\n");
  78. printf("Calling circles for data set %d:\n",++cnt);
  79. for(int i=; i<=n; i++)
  80. {
  81. if(vis[i])
  82. continue;
  83. if(!vis[i])
  84. printf("%s",s[i].c_str());
  85. dfs(i);
  86. printf("\n");
  87. }
  88. }
  89. return ;
  90. }

uva247 - Calling Circles(传递闭包+DFS)的更多相关文章

  1. UVa247 Calling Circles

    Time Limit: 3000MS     64bit IO Format: %lld & %llu map存人名,floyd传递闭包,DFS查询. 输出答案的逗号后面还有个空格,被坑到了2 ...

  2. UVa 247 Calling Circles (DFS+Floyd)

    题意:如果两个人互通电话,那么他们就在一个电话圈里,现在给定 n 个人,并且给定 m 个通话记录,让你输出所有的电话圈. 析:刚开始没想到是Floyd算法,后来才知道是这个算法,利用这个算法进行连通性 ...

  3. UVa 247 Calling Circles【传递闭包】

    题意:给出n个人的m次电话,问最后构成多少个环,找出所有的环 自己想的是:用map来储存人名,每个人名映射成一个数字编号,再用并查集,求出有多少块连通块,输出 可是map不熟,写不出来,而且用并查集输 ...

  4. UVa 247 (传递闭包) Calling Circles

    题意: 有n个人m通电话,如果有两个人相互打电话(直接或间接)则在同一个电话圈里.输出所有电话圈的人的名单. 分析: 根据打电话的关系,可以建一个有向图,然后用Warshall算法求传递闭包. 最后输 ...

  5. 【Calling Circles UVA - 247 】【Floyd + dfs】

    用到的东西 Floyd算法(不考虑路径的长度,只关心两点之间是否有通路,可用于求有向图的传递闭包) STL map中的count用法 利用dfs输出同一个圈内的名字 题意 题目中给出 n 的人的名字, ...

  6. UVA 247"Calling Circles"(floyd求传递闭包+SCC)

    传送门 题意: 如果两个人相互打电话(直接或间接),则说他们在同一个电话圈里. (a,b) 表示 a 打给 b: 例如,(a,b),(b,c),(c,d),(d,a),则这四个人在同一个电话圈里: 输 ...

  7. UVa 247 - Calling Circles(Floyd求有向图的传递闭包)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. UVA - 247 Calling Circles(Floyd求传递闭包)

    题目: 思路: 利用Floyd求传递闭包(mp[i][j] = mp[i][j]||(mp[i][k]&&mp[k][j]);),当mp[i][j]=1&&mp[j][ ...

  9. 洛谷 题解 UVA247 【电话圈 Calling Circles】

    [题意] 如果两个人互相打电话(直接或者间接),则说他们在同一个电话圈里.例如,\(a\)打给\(b\),\(b\)打给\(c\),\(c\)打给\(d\),\(d\)打给\(a\),则这四个人在同一 ...

随机推荐

  1. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) A. Bear and Poker 分解

    A. Bear and Poker Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/573/pro ...

  2. URAL 1775 B - Space Bowling 计算几何

    B - Space BowlingTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  3. Struts2之异常处理

    一.学习案例:通过在input.jsp页面输入登录账号和password測试异常处理机制. 二.案例分析:struts2提供了局部异常处理机制和全局异常处理机制.局部优先于全局异常处理,当异常找不到局 ...

  4. C++11 类内初始化

    C++11新标准规定,可以为数据成员提供一个类内初始值.创建对象时,类内初始值将用于初始化数据成员.没有初始值的成员将默认初始化. 对类内初始值的限制与之前介绍的类似:或者放在花括号里,或者放在等号右 ...

  5. Ruby用法总结

    1.ruby中的整数.浮点数.字符串之间的相互转换 ruby的整数.浮点数.字符串的类均提供了to_i,to_f,to_s三个方法,分别用于转换成整数.转换成浮点数.转换成字符串. 2.数组的遍历 例 ...

  6. 小白日记23:kali渗透测试之提权(三)--WCE、fgdump、mimikatz

    WCE windows身份认证过程 http://wenku.baidu.com/view/cf2ee127a5e9856a56126017.html #特例在登陆的目标服务器/系统,有一个w摘要安全 ...

  7. DataBase 之 常用操作

    (1) try catch 配合 Transactions 使用 --打开try catch功能 set xact_abort on begin try begin tran ) commit tra ...

  8. Android(java)学习笔记207:开源项目使用之gif view

    1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...

  9. 二分法 (UVA10668 Expanding Rods)(二分+几何)

    转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301845324 大致题意: 一根两端固定在两面墙上的杆 受热弯曲后变弯曲.求前后两个状态 ...

  10. FragmentTabHost切换Fragment时避免重复加载UI

    使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Frag ...