上一页 1 ··· 81 82 83 84 85
  2011年8月11日
摘要: POJ_1236 这个题目的TaskA实际上就是在求入度为0的强连通分量的个数,而TaskB实际上就是在求各个强连通分量中入度为0的个数与出度为0的个数的较大值。 同时这个题目与之前做的点双连通的分量有所不同,其中有一点便是在求强连通分量时对于low[u]>dfn[v]时更新low[u]的值,有一个前提条件就是v在栈内,因而要单独用一个数组标记v是否在栈内,而求点双连通分量时则不需要这个数组,因为只要G[u][v]为1,且dfn[v]不为0,那么v一定在栈中。 对于双连通分量为什么不需要标记v是否在栈内,可以先假设v不在栈中但dfn[v]不为0,而如果G[u][v]为1,那么在dfs的过 阅读全文
posted @ 2011-08-11 17:56 Staginner 阅读(250) 评论(0) 推荐(0) 编辑
  2011年8月9日
摘要: POJ_2942说实话,这个题目对我来讲获益匪浅。一开始看了题目之后就没什么想法(而且后来在学习别人的代码时发现自己对题意的理解也有偏差),后来便去看别人的报告和代码,结果云里雾里,什么双连通、点双连通、边双连通、奇圈等等连概念甚至都不了解,一度令我很郁闷,但后来慢慢在纠结中一点点地学习着概念和算法。图论概念不懂便去查概念,概念差不多了之后便找了份通俗点的代码开始看,光有代码看不懂便又找了好几份解题报告综合起来一起看,后来发现要用tarjan算法,便又去查阅相关tarjan算法的资料,后来始终想不通点双连通分量求法中的dfs函数的运行原理,便又把别人代码这一块切下来,自己改参数、输出结果、画图 阅读全文
posted @ 2011-08-09 19:54 Staginner 阅读(921) 评论(0) 推荐(0) 编辑
  2011年8月7日
摘要: POJ_3308这个题目有点像二分图最小点集覆盖问题,但由于边带权,所以不能直接用二分图最大匹配来做。参考了别人的想法之后,发现构图的时候原来还是要用的二分图的思想,将行、列分别看做一个集合,由于最后求费用乘积的最小值,所以先传化成log2形式的费用,源点与行之间的容量初始化为log2行费用,列与汇点之间的容量初始化log2列费用。之后对读入的伞兵位置对应的行和列之间连一条有向边,容量为INF。 最后只要求一下最小割就可以了,也就是最大网络流。#include<stdio.h>#include<string.h>#include<math.h>double 阅读全文
posted @ 2011-08-07 14:31 Staginner 阅读(370) 评论(0) 推荐(0) 编辑
上一页 1 ··· 81 82 83 84 85