HDU 4460 Friend Chains
1.HDU 1312 Red And Black2.HDU 1240 Asteroids!
3.HDU 4460 Friend Chains
4.HDU 2037 今年暑假不AC5.HDU 2570 迷瘴6.HDU 1213 How Many Tables7.HDU 1789 Doing Homework again8.HDU 1020 Encoding9.HDU 4334 Trouble10.HDU 2999 Stone Game, Why are you always there?11.HDU 3980 Paint Chain12.HDU 2873 Bomb Game13.HDU 3590 PP and QQ思路
哈希使得每个人都有一个对应的数字,然后用邻接表存储,然后使用BFS搜索出最长的友人链。注意每一次搜索都需要初始化vis标记数组,在每一组测试样例完成后需要将mp哈希map和邻接表ve初始化为空,否则会影响计算。注意当出现两个联通块时需要输出-1。
代码
#include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <map> using namespace std; const int N = 1e3 + 10; int n, m, k, res, flag; map<string, int> mp; vector<int>ve[N]; bool vis[N]; struct node { int x, step; }; void bfs(int x) { vis[x] = true; queue<node> q; q.push({x, 0}); while (!q.empty()) { node start = q.front(); q.pop(); for (auto it : ve[start.x]) { if (vis[it] == true) continue; vis[it] = true; q.push({it, start.step + 1}); } res = max(res, start.step); } for (int i = 1; i <= n; i++) { if (vis[i] == 0) { flag = 1; return; } } } int main() { while (cin >> n){ mp.clear(); if (n == 0) break; for (int i = 1; i <= n; i++) { ve[i].clear(); string s; cin >> s; mp[s] = i; } cin >> m; for (int i = 1; i <= m; i++) { string start, target; cin >> start >> target; ve[mp[start]].push_back(mp[target]); ve[mp[target]].push_back(mp[start]); } int start = 0; for (int i = 1; i <= n; i++) { memset(vis, 0, sizeof vis); bfs(i); if (flag) break; } if (flag) cout << -1 << endl; else cout << res << endl; } return 0; }
合集:
HDU
分类:
ACM / 搜索 / BFS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现