一 早上
看视频,总结并查集(2.5h)
1 找根节点
int find_root (int x,int parent[])
{
int x_root = x;
while(parent[x_root] != -1){
x_root = parent[x_root];
}
return x_root;
}
int fd(int x)
{
if(parent[x]==x)
return x;
else
return parent[x]=fd(parent[x]);
}
2 合并
int union_v (int x,int y,int parent[],int Rank[])
{
int x_root = find_root(x,parent);
int y_root = find_root(y,parent);
if(x_root == y_root){
return 0;
}
else {
if(Rank[x_root] > Rank[y_root]){
parent[y_root] = x_root;
}
else if(Rank[x_root] < Rank[y_root]){
parent[x_root] = y_root;
}
else {
parent[x_root] = y_root;
Rank[y_root] ++;
}
}
}
void hb(int x,int y)
{
parent[fd(y)]=fd(x);
return ;
}
二 下午
1 做题(5h)
1 重载运算符,用来排列结构体
bool operator < (node a,node b){return a.t<b.t;} //重载运算符
2
三 晚上
1 朋友