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\),则这四个人在同一 ...
随机推荐
- C#调用WORD处理的实例代码(包含excel)
最近程序人生(http://www.manong123.com)一个朋友让我帮他做一个小功能,其实就是把WORD文档里的内容存到数据库里去,可以实现搜索并转EXCEL的功能,需求很简单,想不到加上部署 ...
- [Codeforces] 347B - Fixed Points
题意:给定一个序列,现有一种操作:两个数的位置互换.问最多操作一次.序列 [元素位置i] 与 [元素Ai] 相等的最多个数? 依据题意,最多个数为 : [操作之前[元素位置i] 与 [元素Ai] ...
- 【工作记录】android手势事件操作记录
/* 用户按下触摸屏.快速移动后松开 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float vel ...
- [Jest] Test JavaScript with Jest
Let's learn how to unit test your JavaScript with Jest, a JavaScript unit testing framework from Fac ...
- 【ZZ】Python入门神图
http://mp.weixin.qq.com/s?__biz=MzA3OTIxNTA0MA==&mid=401383338&idx=1&sn=73009cce06d58656 ...
- Java_Utils框架
Spring Utils https://github.com/tangyanbo/springmore
- Ng-include 例子
<body> <div ng-app="myApp"> <div ng-controller="firstController"& ...
- 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 右键选择该文件.cpp格式的->属性->预编译头,→ 不使用预编译 ...
- PHP.10-PHP实例(一)-简单的计算器
PHP-简单的计算器 [PHP语法详解] PHP在web开发中的应用 PHP编写步骤 1.编写一个后缀名为.php文件2.上传到Web服务器的文档根目录下3.通过浏览器访问Web服务器管理下的PHP文 ...
- JQuery EasyUI 之 DataGrid
1.动态创建datagrid 在页面上添加一个div或table标签,然后用jquery获取这个标签,并初始化一个datagrid.代码如下: (1)页面上添加div标签 <div id=&qu ...