找到点1和点n所在的连通块中权值最小的边即为答案。
class Solution {
public:
int minScore(int n, vector<vector<int>>& roads) {
vector<vector<pair<int,int>>> g(n+1);
for(auto p:roads){
g[p[0]].push_back({p[1],p[2]});
g[p[1]].push_back({p[0],p[2]});
}
vector<int> vis(n+1,0);
function<void(int)> dfs=[&](int u){
for(auto t:g[u]){
int v=t.first;
if(vis[v]) continue;
vis[v]=1;
dfs(v);
}
};
dfs(1);
int ans=(int)1e9;
for(auto p:roads){
if(vis[p[0]]||vis[p[1]]) ans=min(ans,p[2]);
}
return ans;
}
};
时间复杂度:O(n+m)
空间复杂度:O(n+m)

本文介绍了一种通过深度优先搜索(DFS)找到图中连接点1和点n所在连通块中权值最小边的方法。该算法首先构建图的邻接表,然后使用DFS遍历从点1开始的所有可达节点,并记录下这些可达节点所经过的边的最小权值。
6万+

被折叠的 条评论
为什么被折叠?



