本蒟蒻又来发题解了

这题是不是有点像并查集,但是那个询问的个数是不是有点骚;

所以,普通的并查集是无法解决这个问题的,这个时候就需要用到带权并查集了;

每次跑的时候都记录下它的下面有几个点,然后询问的时候的复杂度是O(1)的;

好,接下来就可以愉快的码代码了:

#include<bits/stdc++.h>
using namespace std; #define maxn 500010 char ch; int n, x, y, fa[maxn], sum[maxn], num[maxn]; //比常规的并查集多了一行 int find(int x) { if(fa[x] == x) return x; sum[x] += sum[fa[x]];//还需要统计它下面的积木数 return fa[x] = find(fa[x]); } //fa[]就不说了,sum[]是来存它下面的积木数,num[]是这一列的积木数; int main() { scanf("%d", &n); for(int i = 1; i <= maxn; ++ i) { fa[i] = i;//嗯,它的祖先就是它自己,常规操作; sum[i] = 0;//它的下面QwQ肯定没有积木啊 num[i] = 1;//目前这一列只有一个积木 } for(int i = 1; i <= n; ++ i) { cin >> ch; if(ch == 'M')//如果这是'M',那就要合并 { scanf("%d%d", &x, &y); x = find(x), y = find(y); if(x != y)//如果他们的祖先不同,就是他们不在同一个联通块上 { fa[x] = y;//合并它们 sum[x] = num[y]; //数量要相加 num[y] += num[x]; //因为x要和y合并 } } else { scanf("%d", &x); find(x);//还需要再来一次; printf("%d\n", sum[x]);//O(1)输出; } } return 0; }

嗯,你愉快的拿了27分;

好,开始查错了,

戴上眼镜,睁大眼睛

哪里有错?

就是过不去数据,哎;

好吧,我猜这么神仙的你们肯定找到哪里错了,不像蒟蒻我(划掉

#include<bits/stdc++.h>
using namespace std; #define maxn 500010 char ch; int n, x, y, fa[maxn], sum[maxn], num[maxn]; //fa[]就不说了,sum[]是来存它下面的积木数,num[]是这一列的积木数; //比常规的并查集多了一行 int find(int x) { if(fa[x] == x) return x; int f = find(fa[x]); sum[x] += sum[fa[x]];//还需要统计它下面的积木数 return fa[x] = f; } int main() { scanf("%d", &n); for(int i = 1; i <= maxn; ++ i) { fa[i] = i;//嗯,它的祖先就是它自己,常规操作; sum[i] = 0;//它的下面QwQ肯定没有积木啊 num[i] = 1;//目前这一列只有一个积木 } for(int i = 1; i <= n; ++ i) { cin >> ch; if(ch == 'M')//如果这是'M',那就要合并 { scanf("%d%d", &x, &y); x = find(x), y = find(y); if(x != y)//如果他们的祖先不同,就是他们不在同一个联通块上 { fa[x] = y;//合并它们 sum[x] = num[y]; //数量要相加 num[y] += num[x]; //因为x要和y合并 } } else { scanf("%d", &x); find(x);//还需要再来一次; printf("%d\n", sum[x]);//O(1)输出; } } return 0; }

有没有发现哪里错了,

是的,就是在find函数里面;

第一个代码是:

int find(int x) { if(fa[x] == x) return x; sum[x] += sum[fa[x]];//还需要统计它下面的积木数 return fa[x] = find(fa[x]); }

第二个代码是:

int find(int x) { if(fa[x] == x) return x; int f = find(fa[x]); sum[x] += sum[fa[x]];//还需要统计它下面的积木数 return fa[x] = f; } 

是吧,第一个是先更新sum[],再递归;

而第二个是先递归,再更新sum[];

所以,我们应该是要先递归完,再来更新;

如果要先更新的话,那这个find函数对与sum[]的更新就没有作用;

嗯,就这么结束了;

PS. AC的代码是第二篇,第一篇有问题;

转载于:https://www.cnblogs.com/Flash-plus/p/11210692.html

洛谷 P2342 叠积木 题解相关推荐

  1. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  2. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  3. 洛谷P1273 有线电视网 题解

    洛谷P1273 有线电视网 题解 题目链接:P1273 有线电视网 题意: 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为 ...

  4. 洛谷P4568 [JLOI2011] 飞行路线 题解

    洛谷P4568 [JLOI2011] 飞行路线 题解 题目链接:P4568 [JLOI2011] 飞行路线 题意: Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公 ...

  5. 洛谷P3426 [POI2005]SZA-Template 题解

    洛谷P3426 [POI2005]SZA-Template 题解 题目链接:P3426 [POI2005]SZA-Template 题意:你打算在纸上印一串字母. 为了完成这项工作,你决定刻一个印章. ...

  6. 洛谷P1156 垃圾陷阱 题解浅谈刷表法与填表法

    洛谷P1156 垃圾陷阱 题解&浅谈刷表法与填表法 填表法 :就是一般的动态规划,当前点的状态,可以直接用状态方程,根据之前点的状态推导出来. 刷表法:由当前点的状态,更新其他点的状态.需要注 ...

  7. 洛谷P1262 间谍网络题解

    洛谷P1262 间谍网络题解 题目大意 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果 A 间谍手中掌握着关于 B 间谍的犯罪证据,则称 A 可以揭发 B.有些间谍收受贿赂,只要 ...

  8. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  9. 洛谷P4099 [HEOI2013]SAO 题解

    洛谷P4099 [HEOI2013]SAO 题解 题目链接:P4099 [HEOI2013]SAO 题意: Welcome to SAO ( Strange and Abnormal Online). ...

  10. 洛谷 P2704 炮兵阵地 题解

    洛谷 P2704 炮兵阵地 题解 洛谷 P2704 题目 司令部的将军们打算在NNNMMM的网格地图上部署他们的炮兵部队.一个NNNMMM的地图由NNN行MMM列组成,地图的每一格可能是山地(用&qu ...

最新文章

  1. Java数组传参sql_Java中如何传一个数组作为筛选条件操作数据库(sql中foreach的使用)...
  2. postgresql中自定义函数脚本的备份及恢复
  3. Java spark中的各种范型接口Function的区别(持续更新中)
  4. bootcmd和bootargs
  5. 小米10S继承“祖传”三重快充:50W有线+30W无线+10W反充
  6. 95-140-122-源码-transform-算子reduce
  7. 用matlab读取raw并做出图像,image - 如何在MATLAB中读取RAW图像? - 堆栈内存溢出
  8. Linux文件导出到Windows乱码的问题
  9. 爬虫之scrapy环境安装
  10. 最新html word 分页符,分页符在哪 或者打开 word文档选项
  11. 国美易卡管理云平台,国美易卡采用大量另类数据
  12. Photoshop照片一键转换手绘效果图动作
  13. 唯物辩证法-马克思主义辩证法
  14. border渐变 ios_iOS一个方法搞定view渐变色
  15. outlook收件延迟严重_你(严重)对我不了解的五件事
  16. UserWarning: mkl-service package failed to import, therefore Intel(R) MKL in
  17. 每日诗词 【登徒子好色赋并序】
  18. 好用的鼠标连点软件,鼠标录制播放软件
  19. NC17889 新建 Microsoft Office Word 文档
  20. JAVA中的时间大小比较

热门文章

  1. Linux(九、十)文件权限及网络配置管理
  2. Excel 输入内容自动生成条形码
  3. C语言 --- sizeof() 7种使用详解
  4. WebRTC APM
  5. 20190519 ICPC西安邀请赛游记
  6. 获取QQ音乐排行榜数据
  7. Cypress Locators
  8. 自动合并两个.bib 去除.bib中的重复条目
  9. QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
  10. 台式计算机输入设备,简述常用的输入设备和输出设备有哪些 – 手机爱问