uva247 - Calling Circles(传递闭包+DFS)
题意:两人相互打电话(直接或间接),则在一个电话圈。即a给b打电话,b给c打电话,则a给c间接打电话。
注意:1、注意标记。2、注意输出格式。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<string>
- #include<sstream>
- #include<cctype>
- #include<cmath>
- #include<cstdlib>
- #include<algorithm>
- #include<stack>
- #include<queue>
- #include<deque>
- #include<set>
- #include<map>
- #include<list>
- using namespace std;
- const int MAXN=+;
- const int INF=0x7f7f7f7f;
- const double PI=acos(1.0);
- typedef long long ll;
- typedef unsigned long long llu;
- map<string,int> ma;
- char s1[],s2[];
- string s[];
- int d[][];
- int vis[];
- int n;
- int dfs(int w)//遍历,若在一个电话圈里,则输出,注意标记
- {
- vis[w]=;
- for(int i=; i<=n; i++)
- {
- if(!vis[i]&&d[w][i]&&d[i][w])
- {
- printf(", %s",s[i].c_str());//注意格式--空格
- vis[i]=;
- }
- }
- }
- int main()
- {
- int m;
- int cnt=;
- while(scanf("%d%d",&n,&m)==&&n&&m)
- {
- memset(d,,sizeof(d));
- memset(vis,,sizeof(vis));
- ma.clear();//!!!
- int cas=;
- while(m--)
- {
- scanf("%s%s",s1,s2);
- if(!ma.count(s1))//按输入顺序,依次给名字标号,并存进s
- {
- ma[s1]=++cas;
- s[cas]=string(s1);
- }
- if(!ma.count(s2))
- {
- ma[s2]=++cas;
- s[cas]=string(s2);
- }
- int i=ma[s1],j=ma[s2];
- d[i][j]=;
- }
- for(int k=; k<=n; k++)//有向图的传递闭包
- {
- for(int i=; i<=n; i++)
- {
- for(int j=; j<=n; j++)
- {
- d[i][j]=d[i][j]||(d[i][k]&&d[k][j]);
- }
- }
- }
- if(cnt)
- printf("\n");
- printf("Calling circles for data set %d:\n",++cnt);
- for(int i=; i<=n; i++)
- {
- if(vis[i])
- continue;
- if(!vis[i])
- printf("%s",s[i].c_str());
- dfs(i);
- printf("\n");
- }
- }
- return ;
- }
uva247 - Calling Circles(传递闭包+DFS)的更多相关文章
- UVa247 Calling Circles
Time Limit: 3000MS 64bit IO Format: %lld & %llu map存人名,floyd传递闭包,DFS查询. 输出答案的逗号后面还有个空格,被坑到了2 ...
- UVa 247 Calling Circles (DFS+Floyd)
题意:如果两个人互通电话,那么他们就在一个电话圈里,现在给定 n 个人,并且给定 m 个通话记录,让你输出所有的电话圈. 析:刚开始没想到是Floyd算法,后来才知道是这个算法,利用这个算法进行连通性 ...
- UVa 247 Calling Circles【传递闭包】
题意:给出n个人的m次电话,问最后构成多少个环,找出所有的环 自己想的是:用map来储存人名,每个人名映射成一个数字编号,再用并查集,求出有多少块连通块,输出 可是map不熟,写不出来,而且用并查集输 ...
- UVa 247 (传递闭包) Calling Circles
题意: 有n个人m通电话,如果有两个人相互打电话(直接或间接)则在同一个电话圈里.输出所有电话圈的人的名单. 分析: 根据打电话的关系,可以建一个有向图,然后用Warshall算法求传递闭包. 最后输 ...
- 【Calling Circles UVA - 247 】【Floyd + dfs】
用到的东西 Floyd算法(不考虑路径的长度,只关心两点之间是否有通路,可用于求有向图的传递闭包) STL map中的count用法 利用dfs输出同一个圈内的名字 题意 题目中给出 n 的人的名字, ...
- UVA 247"Calling Circles"(floyd求传递闭包+SCC)
传送门 题意: 如果两个人相互打电话(直接或间接),则说他们在同一个电话圈里. (a,b) 表示 a 打给 b: 例如,(a,b),(b,c),(c,d),(d,a),则这四个人在同一个电话圈里: 输 ...
- UVa 247 - Calling Circles(Floyd求有向图的传递闭包)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA - 247 Calling Circles(Floyd求传递闭包)
题目: 思路: 利用Floyd求传递闭包(mp[i][j] = mp[i][j]||(mp[i][k]&&mp[k][j]);),当mp[i][j]=1&&mp[j][ ...
- 洛谷 题解 UVA247 【电话圈 Calling Circles】
[题意] 如果两个人互相打电话(直接或者间接),则说他们在同一个电话圈里.例如,\(a\)打给\(b\),\(b\)打给\(c\),\(c\)打给\(d\),\(d\)打给\(a\),则这四个人在同一 ...
随机推荐
- 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 ...
- URAL 1775 B - Space Bowling 计算几何
B - Space BowlingTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- Struts2之异常处理
一.学习案例:通过在input.jsp页面输入登录账号和password測试异常处理机制. 二.案例分析:struts2提供了局部异常处理机制和全局异常处理机制.局部优先于全局异常处理,当异常找不到局 ...
- C++11 类内初始化
C++11新标准规定,可以为数据成员提供一个类内初始值.创建对象时,类内初始值将用于初始化数据成员.没有初始值的成员将默认初始化. 对类内初始值的限制与之前介绍的类似:或者放在花括号里,或者放在等号右 ...
- Ruby用法总结
1.ruby中的整数.浮点数.字符串之间的相互转换 ruby的整数.浮点数.字符串的类均提供了to_i,to_f,to_s三个方法,分别用于转换成整数.转换成浮点数.转换成字符串. 2.数组的遍历 例 ...
- 小白日记23:kali渗透测试之提权(三)--WCE、fgdump、mimikatz
WCE windows身份认证过程 http://wenku.baidu.com/view/cf2ee127a5e9856a56126017.html #特例在登陆的目标服务器/系统,有一个w摘要安全 ...
- DataBase 之 常用操作
(1) try catch 配合 Transactions 使用 --打开try catch功能 set xact_abort on begin try begin tran ) commit tra ...
- Android(java)学习笔记207:开源项目使用之gif view
1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...
- 二分法 (UVA10668 Expanding Rods)(二分+几何)
转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301845324 大致题意: 一根两端固定在两面墙上的杆 受热弯曲后变弯曲.求前后两个状态 ...
- FragmentTabHost切换Fragment时避免重复加载UI
使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Frag ...