codevs 1001 舒适的路线 解题报告 (枚举+并查集)
2016-09-10 16:03
274 查看
在线评测:
http://codevs.cn/problem/3027/
整体思路:
我们可以先把边排序,然后我们想一下,我们要求一条路,这条路上的最大值和最小值的比值最小,那么显然,我们应该是最大值一定的情况下,最小值尽可能的大。所以我们排完序之后,我们从长边到短边开始枚举最大边,然后我们从这条边开始往下枚举,每次把边的两点联通,然后判断起点终点是否联通,如果联通,则用当前选取的最大边和最小边尝试更新答案。最后求出最优情况下最大边和最小边的大小之后,如果不能整除,gcd一下搞成分数就行了!
失误之处:
我开了一个全局变量minn,来尝试记录当当前最大边为某边时,最小边的权值,然而我没有在每次枚举最大边后将其清零,在判断是否更新答案的时候也没有进行判断当前情况下到底图是否联通,于是存在枚举这个最大边往下根本无法联通,但我还调用了以前的minn来进行计算,最后算出了一些远远小于1的值。实在是一个很大的失误!!!!
体会心得:
一定要考虑会不会误用到上次循环遗留的变量。
不要过于追求开全局变量,适当使用局部变量有时候更能提醒自己进行初始化~~
AC代码:
http://codevs.cn/problem/3027/
整体思路:
我们可以先把边排序,然后我们想一下,我们要求一条路,这条路上的最大值和最小值的比值最小,那么显然,我们应该是最大值一定的情况下,最小值尽可能的大。所以我们排完序之后,我们从长边到短边开始枚举最大边,然后我们从这条边开始往下枚举,每次把边的两点联通,然后判断起点终点是否联通,如果联通,则用当前选取的最大边和最小边尝试更新答案。最后求出最优情况下最大边和最小边的大小之后,如果不能整除,gcd一下搞成分数就行了!
失误之处:
我开了一个全局变量minn,来尝试记录当当前最大边为某边时,最小边的权值,然而我没有在每次枚举最大边后将其清零,在判断是否更新答案的时候也没有进行判断当前情况下到底图是否联通,于是存在枚举这个最大边往下根本无法联通,但我还调用了以前的minn来进行计算,最后算出了一些远远小于1的值。实在是一个很大的失误!!!!
体会心得:
一定要考虑会不会误用到上次循环遗留的变量。
不要过于追求开全局变量,适当使用局部变量有时候更能提醒自己进行初始化~~
AC代码:
printf ( "%d/%d\n" ,amaxn/tp,aminn/tp); |
相关文章推荐
- codevs 1001 舒适的路线 玄学方法 解题报告
- 求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线
- CODEVS 1001 舒适的路线
- codevs1001 舒适的路线
- codevs 1001 舒适的路线
- bzoj 1050 codevs1001 舒适的路线[并查集]
- codevs 1001 舒适的路线
- 枚举+并查集 之 CODE[VS] 1001 舒适的路线 2006年
- codevs 1001 舒适的路线
- codevs 1001 舒适的路线(并查集) 题解
- CODE[VS] 1001 舒适的路线
- Codevs 1001 舒适的路线
- 舒适的路线(codevs 1001)
- CODEVS 1001舒适的路线
- codevs 1001 舒适的路线 (并查集)
- codevs 1001 舒适的路线
- codevs 1001 舒适的路线 并查集
- CODE[VS] 1001 舒适的路线 (kruskal)
- [Codevs] 1001 舒适的路线
- CODEVS1001 舒适的路线 (并查集)