有个问题我比较疑惑我是这样写的, 就是查询的时候, 不去修改任何的d 和cnt ,但是在合并的时候会做, 结果我做下来就是错误的: int find(int x ) { if (p[x]!=x) { int t = find(p[x]); // d[x] += d[p[x]]; p[x] = t; } return p[x]; } void move(int a, int b) { // move a to b int ra = find(a) , rb = find(b); int &size_a = cnt[ra] , &size_b = cnt [rb]; int above_a = size_a - d[a]; // include a p[a] = rb; size_a -= above_a; d[a] = size_b; size_b += above_a; }
点赞

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务