链式前向星复习
很久没写图论的题了,生疏了,c++式建图都不会了(丑陋)
水题在这里:
概述题意:
给一个无向图,从原点开始求最长的路径长度(再稍处理一下)
其实主要是记录一下c++式的建图(没写过)
定义:
int num; struct ii { int to, next; ii(int x, int y) : to(x), next(y) {} }; vector<int> head; vector<ii> mp; void add(int x, int y) { mp.emplace_back(y, head[x]); head[x] = ++num; }
初始化:
vector<int> ans(n, 0); head = ans, num = 0; mp.emplace_back(0, 0);
切记有一个mp.emplace_back()的预处理,因为一定是要下标从1开始
ACcode:

class Solution { int num; struct ii { int to, next; ii(int x, int y) : to(x), next(y) {} }; vector<int> head; vector<ii> mp; void add(int x, int y) { mp.emplace_back(y, head[x]); head[x] = ++num; } public: int networkBecomesIdle(vector<vector<int>> &edges, vector<int> &patience) { int n = patience.size(), mx = 0; vector<int> ans(n, 0); head = ans, num = 0; mp.emplace_back(0, 0); for (auto i : edges) add(i[0], i[1]), add(i[1], i[0]); queue<pair<int, int>> q; q.push({0, 0}); while (q.size()) { int u = q.front().first, v = q.front().second; q.pop(); for (int i = head[u]; i; i = mp[i].next) { int y = mp[i].to; if (y == 0) continue; if (ans[y] == 0) { ans[y] = v + 1; q.push({y, v + 1}); } } } for (int i = 1; i < n; ++i) mx = max(mx, 2 * 2 * ans[i] - (2 * ans[i] % patience[i] ? 2 * ans[i] % patience[i] : patience[i])); return mx + 1; } };
大
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!