当前位置: 首页 > news >正文

UVa247 Calling Circles(Floyd warshall算法)

题意

给定两个人相互打电话,如果a打给b,b打给c,c打给a,则说a,b,c在同一电话圈中。给出n个人的m次通话,输出所有的电话圈

思路

用graph[u][v]=1表示u和v之间有打电话。在使用floyd算法计算所有的点对之间的值。graph[u][v]=1表示u,v之间有直接或者间接打电话。如果graph[u][v] = 1并且graph[v][u]=1,说明u和v是在同一个电话圈

代码如下

#include <bits/stdc++.h>using namespace std;const int N = 30;#define _for(i, a, b) for(int i = (a); i < (b); i++)
#define _rep(i, a, b) for (int i = (a); i <= (b); i++)int n, m;
int graph[N][N];
bool vis[N];
map<string, int> nameMap;
vector<string> names;int getId(const string& name)
{if (!nameMap.count(name)){int size = names.size();nameMap[name] = size;names.push_back(name);}return nameMap[name];
}void fastio()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
}int main()
{fastio();#ifndef ONLINE_JUDGEifstream fin("f:\\OJ\\uva_in.txt");streambuf* back = cin.rdbuf(fin.rdbuf());#endifint kase = 1;while (cin >> n >> m) {if (n == 0 && m == 0) {break;}if (kase > 1) {cout << endl;}nameMap.clear();names.clear();memset(graph, 0, sizeof(graph));fill(vis, vis + N, false);_for(i, 0, m) {string a, b;cin >> a >> b;int u = getId(a);int v = getId(b);graph[u][v] = 1;}_for(k, 0, n) {_for(i, 0, n) {_for(j, 0, n) {graph[i][j] = graph[i][j] || (graph[i][k] && graph[k][j]);}}}cout << "Calling circles for data set " << kase << ":" << endl;_for(u, 0, n) {if (vis[u]) {continue;}vis[u] = true;cout << names[u];_for(v, 0, n) {if (!vis[v] && graph[u][v] && graph[v][u]) {vis[v] = true;cout << ", " << names[v];}}cout << endl;}kase++;}#ifndef ONLINE_JUDGEcin.rdbuf(back);#endifreturn 0;
}
http://www.lryc.cn/news/131365.html

相关文章:

  • Java项目之基于ssm框架的社区生活超市管理系统(附源码)
  • Android 实现录音功能
  • drawio导出矢量图
  • 关于angular router-outlet
  • 设计模式详解-桥接模式
  • 设计模式—— 单一职责原则
  • 嵌入式系统中如何选择RTC电池?
  • 56 | 国内游戏直播竞品分析
  • STM32 CubeMX (第一步Freertos任务管理:创建、删除、挂起、恢复)
  • 0101读写分离测试-jdbc-shardingsphere-中间件
  • sqlite3将词典导入数据库
  • 浏览器 - 事件循环机制详解
  • 析构函数中不应该抛出异常(摘录)
  • Windows定时任务计划无法显示任务程序界面的问题解决
  • 【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求
  • Python学习笔记_进阶篇(二)_django知识(一)
  • 【hive】hive中row_number() rank() dense_rank()的用法
  • 【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署
  • 计算实数数组中所有元素的绝对值 numpy.fabs()
  • 深入浅出Pytorch函数——torch.nn.init.orthogonal_
  • ORACLE中UNION、UNION ALL、MINUS、INTERSECT学习
  • 【k8s、云原生】基于metrics-server弹性伸缩
  • 回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图)
  • VSCode快捷键
  • 贪心算法求数组中能组成三角形的最大周长
  • VMWare Workstation 17 Pro 网络设置 桥接模式 网络地址转换(NAT)模式 仅主机模式
  • 拒绝摆烂!C语言练习打卡第四天
  • KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17
  • 【学习笔记之java】使用RestTemplate调用第三方接口
  • 数据集成革新:去中心化微服务集群的无限潜能