778.水位上升的泳池中游泳
还是并查集的题,不过和昨天的很类似
这道题就是用并查集合并点,找到最短的路径中权值最大的点的权
class UnionFind{
public:
vector<int>parent;
vector<int>size;
int n;//点数
int setCount;//连通分量数
public:
UnionFind(int _n):n(_n),setCount(_n),parent(_n),size(_n,1){
iota(parent.begin(),parent.end(),0);
}//构造函数
int findset(int i){//找根
return i == parent[i]?i:parent[i]=findset(parent[i]);
}
bool unite(int x,int y){//合并
x = findset(x);
y = findset(y);
if(x == y)return false;
if(size[x]<size[y])swap(x,y);
parent[y]=x;
size[x]+=size[y];
--setCount;
return true;
}
bool connected(int x,int y){//是否连通
x = findset(x);
y = findset(y);
return x==y;
}
};
class Solution {
public:
int swimInWater(vector<vector&