关于HDU 5952的那些事
内容过后再贴,先发表一下心情和感悟。
这个题,我TLE了十多发,后来看了别人的题解,思路是一样的,他做了剪枝的我也做了,为何他的能过的我的超时?后来发现一个不是主要问题的问题:大家的图存储用的都是前向星式的写法,我的代码用的vector式的邻接表法,莫非vector很慢,导致超时?或者是我的代码写法结构和那个人的不一样,所以我的代码存在潜在的bug,说不定卡在哪个数据一直死循环了。然后把代码推倒重写,改成前向星式的写法,写好了,样例一测,直接过,提交一发,直接AC。我就不明白了,vector有这么慢吗?虽然之前也遇到卡vector的题,但vector也不至于慢太多呀,我始终想不明白呀。然后,再重新写了一个用vector存图的版本,dfs部分直接把前向星部分的复制过来,把边的扫描方式稍微改一改就OK了。样例一测,对了,提交一发,仍然AC。这下我就更不明白了,既然vector也能A,那说明不是vector的问题啊,莫非是我的第一个版本有死循环的bug?犹豫了一会,写了个测试数据生成器,生成一波大数据,把两个版本一跑,发现,版本三花了0.4s左右,版本一跑了蛮久,我以为是死递归了,准备关闭黑窗口时,跑完了,花了14s多。然后,我似乎明白了,版本一的某个地方花了太多时间,导致超时。对比一下两个版本,思路一模一样,代码结构略有不同,在保存答案那里,版本一用的是循环搜索得到的一组顶点解,用二进制位存储这些点,放到set集合中,让set自动去重。然后输出set的size。版本三是直接计数器加一,因为不存在重复。于是,我开始怀疑set了。虽说set的增删改查都是logN的时间复杂度,但是常数很大(也是听说的),莫非是这个常数大导致超时?仍然很疑惑啊,为何用set就这么慢。然后,我把版本三的记录答案也用了set,跑一下,花了12s多,差不多,仍然很慢,于是,我明白了,心里得到一个结论,set不要乱用,实在是慢。
———————————————————————————————————分割线——————————————————————————————————
过了几分钟后,发现,我记录答案的时候有个循环,对于每次的搜索结果,都要扫描一遍,最多10个,如果解有几千万个(完全有可能,如果N=32,M=1000,S=10),直接计数器加一可以不到1s完成任务,如果每个解都要循环10个顶点,那就要做几亿次循环,自然需要的时间就多了。所以,别小看这个“小循环”。
另外的话,想发表一下玩ACM的感悟。时间能快则快,哪怕是多一次无用的循环,能优化则优化。怎么快怎么写,速度快就是王道。比如:
;i < n;++i))flag = true;
这就是为了追求代码简介和优雅,牺牲了时间。如果是这种情况,还是要纠正习惯,改为这样,哪怕代码多点。
;i < n;++i){
){
flag = true;
break;
}
}
其次,在保证时间足够快的基础上,对于编码来说,怎么快怎么写,不要去考虑变量命名是否规范、代码是否整洁之类的,ACM里面不搞这一套。过了就是王道,否则,没过的话,一切都是瞎扯淡。没用的。当然,能保证代码简介和整洁哪自然最好,保证不了也没关系。比如:
;i = tree[i].next)
while(scanf("%d", &n) != EOF)
直接这样就好了:
for(i = head[root];~i;i = tree[i].next)
while(~scanf("%d", &n))
当然,这种技巧还有很多,哪次找个时间统一做个总结。这里先这样吧。
关于HDU 5952的那些事的更多相关文章
- HDU - 5952 Counting Cliques
Counting Cliques HDU - 5952 OJ-ID: hdu-5952 author:Caution_X date of submission:20191110 tags:dfs,gr ...
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 5952 [DFS]
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=5952] 题意:给出一张无向图,然后判断这张图中一共有多少个不同的大小为S的完全图,并且保证每个点的度 ...
- Counting Cliques HDU - 5952 单向边dfs
题目:题目链接 思路:这道题vj上Time limit:4000 ms,HDU上Time Limit: 8000/4000 MS (Java/Others),且不考虑oj测评机比现场赛慢很多,但10月 ...
- 注意题目条件!!! 团问题 HDU 5952
题目大意:团的定义就是,团内的所有点,两两之间各有一条边,团的大小就是点的个数.现给你一个n个点,m条边的图.问,该图中有多少点的个数为s的团. (题目保证每个点的度数不超过20,n<=100, ...
- hdu 5952 连通子图
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU - 5952 Counting Cliques(DFS)
A clique is a complete graph, in which there is an edge between every pair of the vertices. Given a ...
- hdu 5952 Counting Cliques 求图中指定大小的团的个数 暴搜
题目链接 题意 给定一个\(n个点,m条边\)的无向图,找出其中大小为\(s\)的完全图个数\((n\leq 100,m\leq 1000,s\leq 10)\). 思路 暴搜. 搜索的时候判断要加进 ...
- HDU - 5952 Counting Cliques(dfs搜索)
题目: A clique is a complete graph, in which there is an edge between every pair of the vertices. Give ...
随机推荐
- centos 升级python26到python27
由于开发库依赖于python27,而自己安装的centos6.8自带的python是2.6.6,因此打算简单的做一下升级. 因为centos的yum依赖于python26因此不打算覆盖26.步骤如下: ...
- Codeforces Round #319 (Div. 2) C. Vasya and Petya's Game 数学
C. Vasya and Petya's Game time limit per test 1 second memory limit per test 256 megabytes input sta ...
- java(Android)跨Module调用对应类方法需求解决方案
在开发组件化项目中,遇到一个这样的问题,两个不同的Module相互之间没有任何直接依赖关系,现在需求是需要在Module_A中调用Module_B中的某个类的方法,以下为解决此问题的方法: 采用的核心 ...
- Java Spring-AOP中的动态代理
2017-11-10 16:17:12 AOP中有两种代理方式,分别是JDK的动态代理和CGLib的动态代理. JDK的动态代理 Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创 ...
- python2和python3的区别——持续更新
1.在 cookbook 上看到的,python3支持 *运算符 来接收迭代变量,如: a, *b = [, , , ] python2是不支持的! 2.在 cookbook 上看到的,python3 ...
- 2018-2019-2 网络对抗技术 20165332 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165332 Exp3 免杀原理与实践 实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用 ...
- Tornado源码分析 --- Cookie和XSRF机制
Cookie和Session的理解: 具体Cookie的介绍,可以参考:HTTP Cookie详解 可以先查看之前的一篇文章:Tornado的Cookie过期问题 XSRF跨域请求伪造(Cross-S ...
- 201621123005《Java程序设计》第十三次实验总结
<Java程序设计>第十三周实验总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主 ...
- Javascript实现重力弹跳拖拽运动效果
声明: By:GenialX 个人主页:胡旭博客 - www.ihuxu.com QQ:2252065614 演示地址: http://www.ihuxu.com/project/gcdmove/ 调 ...
- STL标准库-容器-unordered_set
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 unordered_set与与unordered_map相似,这次主要介绍unordered_set unordered_set ...