afatnan
Senior Member
C++:
class Solution {
public:
int minScore(int n, vector<vector<int>>& roads) {
bool visited[n + 1];
memset(visited, false, sizeof(visited));
vector<vector<pair<int, int>>> conn(n + 1);
for(vector<int>& edge : roads){
conn[edge[0]].emplace_back(edge[1], edge[2]);
conn[edge[1]].emplace_back(edge[0], edge[2]);
}
int res = 10'000;
queue<tuple<int, int>> q;
q.emplace(1, res);
visited[1] = true;
while(!q.empty()){
auto [p, v] = q.front();
for(pair<int, int>& c : conn[p]){
res = min(res, min(v, c.second));
if(!visited[c.first]){
q.emplace(c.first, res);
visited[c.first] = true;
}
}
q.pop();
}
return res;
}
};
Lam bai 23/3 thi nhan ra bai 22/3 co the giai bang disjoint set union alg duoc, nhanh hon xiu
C++:
class Solution {
public:
int find(int *parent, int i){
if(parent[i] == i) return i;
return find(parent, parent[i]);
}
tuple<int, int> join(int *parent, int i, int j){
int x = find(parent, i);
int y = find(parent, j);
if(x > y) swap(x, y);
parent[y] = x;
return {x, y};
}
int minScore(int n, vector<vector<int>>& roads) {
int parent[n + 1], cost[n + 1];
for(int i = 1; i <= n; ++i) cost[i] = INT_MAX, parent[i] = i;
for(auto &ed : roads){
auto [x, y] = join(parent, ed[0], ed[1]);
cost[x] = min(min(cost[x], cost[y]), ed[2]);
}
return cost[1];
}
};
Last edited: