洛谷 题解 UVA247 【电话圈 Calling Circles】
【题意】
如果两个人互相打电话(直接或者间接),则说他们在同一个电话圈里。例如,\(a\)打给\(b\),\(b\)打给\(c\),\(c\)打给\(d\),\(d\)打给\(a\),则这四个人在同一个圈里;如果\(e\)打给\(f\),而\(f\)不打给\(e\),则不能推出\(e\)和\(f\)在同一个电话圈。输入\(n(n≤25)\)个人的\(m\)次电话,找出所有的电话圈。人名只包含字母,不超过\(25\)个字符,且不重复。
【算法】
\(Floyd\text{传递闭包}\)
【分析】
首先用\(Floyd\)求出传递闭包,即g[i][j]表示i是否直接或间接向j打过电话,当且仅当g[i][j]=g[j][i]=1时二者处于同一个电话圈。构造一个新图,在“一个电话圈里”的两个人之间连一条边,然后依次输出各个联通分量的所有人即可。
【代码】
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
string st[30];
string st1,st2;
bool g[30][30];
bool used[30];
int sum;
int n,m;
int T;
int main()
{
cin>>n>>m;
while(1)
{
sum=0;
T++;
//cout<<T<<endl;
memset(g,0,sizeof(g));
memset(used,0,sizeof(used));
mp.clear();
for(int i=1;i<=m;i++)
{
cin>>st1>>st2;
if(!mp[st1])
{
mp[st1]=++sum;
st[sum]=st1;
}
if(!mp[st2])
{
mp[st2]=++sum;
st[sum]=st2;
}
g[mp[st1]][mp[st2]]=1;
}
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
g[i][j]=g[i][j] || (g[i][k] && g[k][j]);
}
}
}
printf("Calling circles for data set %d:\n",T);
/*for(int i=1;i<=n;i++)
cout<<st[i]<<" ";cout<<endl;*/
for(int i=1;i<=n;i++)
{
if(!used[i])
{
cout<<st[i];
used[i]=1;
for(int j=1;j<=n;j++)
{
if(g[i][j]&&g[j][i]&&!used[j])
{
cout<<", "<<st[j];
used[j]=1;
}
}
cout<<endl;
}
}
cin>>n>>m;
if(n||m)cout<<endl;
else break;
}
return 0;
}
刘汝佳大法好!
洛谷 题解 UVA247 【电话圈 Calling Circles】的更多相关文章
- 洛谷 题解 UVA572 【油田 Oil Deposits】
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...
- 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...
- 洛谷题解P4314CPU监控--线段树
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...
- 洛谷 题解 P2937 【[USACO09JAN]激光电话Laserphones】
看到这题,一下就想到了爆搜.(不过这题输入也是够坑的) 单纯的搜索肯定是会超时的,所以这里需要考虑一些剪枝. 我们令bin[i][j][k]为在第i行j列时,方向为k的最小镜子数,若当时的镜子数已大于 ...
- 洛谷题解 CF777A 【Shell Game】
同步题解 题目翻译(可能有童鞋没读懂题面上的翻译) 给你三张牌0,1,2. 最初选一张,然后依次进行n次交换,交换规则为:中间一张和左边的一张,中间一张和右边一张,中间一张和左边一张...... 最后 ...
- 洛谷题解 CF807A 【Is it rated?】
同步题解 题目 好吧,来说说思路: 1.先读入啦~(≧▽≦)/~啦啦啦 2.判断a[i]赛前赛后是否同分数,如果分数不同,则输出,return 0 . 3.如果同分数,则判断a[i]赛前(或赛后)是否 ...
- 洛谷题解 P1138 【第k小整数】
蒟蒻发题解了 说明:此题我用的方法为桶排(我翻了翻有人用了桶排只不过很难看出来,可能有些重复的,这个题只是作为一个专门的桶排来讲解吧) (不会算抄袭吧 ‘QWaWQ’) 简单来说(会的人跳过就行): ...
- 【洛谷题解】P2303 [SDOi2012]Longge的问题
题目传送门:链接. 能自己推出正确的式子的感觉真的很好! 题意简述: 求\(\sum_{i=1}^{n}gcd(i,n)\).\(n\leq 2^{32}\). 题解: 我们开始化简式子: \(\su ...
- 洛谷题解 P2865 【[USACO06NOV]路障Roadblocks】
链接:https://www.luogu.org/problemnew/show/P2865 题目描述 Bessie has moved to a small farm and sometimes e ...
随机推荐
- Pro自定义数据源原理
1. 概念 Connector:定义连接到一个数据源的连接信息,用于创建datastore. Datastore:代表一个数据源的实例,用于打开一个或多个tables或feature class. ...
- Sage Math中的语法
1.赋值后不能立即输出,而需要停顿.x= 3 不能输出显示,而 x= 3; x 可以显示. 2.可以用分号连续书写多行. 3.矩阵可以用 mtx[i, j]引用,但是行列号通常从0开始,维度n, m ...
- Leetcode Majority Element系列 摩尔投票法
先看一题,洛谷2397: 题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 [h ...
- 性能测试学习第十天-----性能案例分析之CPU消耗过高&响应时间较长
一.现象 /pinter/case/cpu?type=1 使用google的gjson.tojson性能较差 type=2 使用性能好的阿里巴巴的fastjson库 压测过程中,发现应用服 ...
- 用vue做的购物车结算的功能
<!-- 占位 --> <template> <div> <div class="product_table"> <div c ...
- Ubuntu16.04忘记MySQL5.7的root用户密码之解决方案
其实也就四步,如下: 修改配置文件 sudo vimi /etc/mysql/mysql.conf.d/mysqld.cnf 并在 在[mysqld]下方的skip-external-locking下 ...
- vim 文本替换讲解
在VIM中进行文本替换: 1. 替换当前行中的内容: :s/from/to/ (s即substitude) :s/from/to/ : 将当前行中的第一个from,替换成to.如果当前行含有多个 fr ...
- PostgreSQL远程连接,发生致命错误:没有用于主机“…”,用户“…”,数据库“…”,SSL关闭的pg_hba.conf记录
PostgreSQL远程连接方法 有时候在远程连接时,会报Error connecting to the server:致命错误:没有用于主机“…”,用户“…”,数据库“…”,SSL关闭的pg_hba ...
- QtCore概述
所有其他Qt模块都依赖于这个模块. 要包含模块类的定义,请使用以下指令: include < QtCore > 如果您使用qmake来构建您的项目,则默认将QtCore包含在内. 核心功能 ...
- java使用json-lib库的json工具类.
import net.sf.ezmorph.object.DateMorpher;import net.sf.json.JSONArray;import net.sf.json.JSONObject; ...