找到点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)