上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 25 下一页
摘要: 第一次做最大流的题目,用的是LRJ书上的标准E-K算法敲的,刚刚看到这个题目的时候,觉得好像不用最大流算法,直接给起点灌入无穷的流量然后贪心每条路径就行,后来发现大错特错,就算初始点流量无穷,由于管道容量的限制,接下来的点便是个常数,而常数的流量,该向哪个方向流才使最终流量最大,不是简单的贪心就能解决问题的。于是E-K算法就是BFS全图找寻最短的增广路从而对流量进行扩展,如果找遍全图都找不到增广路,则说明该流量最大。此外,因为这个题目不止路径,节点也有容量限制,因此在搜寻增广路的过程中,除了跟路径容量,要跟两端点的容量进行比较,一开始我觉得前端点不需要比较,结果WA了,后来想一下某个路径流量可 阅读全文
posted @ 2014-01-15 15:02 KRisen 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 这道题目折腾了我一个下午,本来我的初步打算是用SPFA(),进行搜索,枚举出发点,看看能到达某个点多少次,就是出发点到该点的路径数,如果出现环,则置为-1,关键在于这个判环过程,如果简单只找到某个点是为环路上一点,即访问它的次数超过了所有点的点数目,这样就会出问题,因为它会影响其他点,下一步是否将它进入队列,如果进入,会造成无限循环,不进的话,根本得不出正确结果,后来我写了个judge函数,判断该点是否还能影响其他点,这样的话,因为要全图搜索,又TLE了。。。没办法,只好换了网站说的FLOYD;这是错误的代码:#include #include #include using namespace 阅读全文
posted @ 2014-01-14 18:26 KRisen 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 第一次看这个题目,完全不知道怎么做,看起来又像是可以建个图进行搜索,但题目条件就给了你几个不等式,这是怎么个做法。。。之后google了下才知道还有个差分约束这样的东西,能够把不等式化成图,要求某个点在满足所有不等式的情况下的最大取值,只需对建好的图进行一次最短路即可不过要使得a b 点满足这样 ak,我们新定义一个s[],s[i]代表从1 到 i的所有的点的和,这样,原不等式就会变成 s[si+ni]-s[si-1]>=k+1 或者 小于=k-1,进行下移项,即可变成差分约束不等式的形式,这样每个点的含义就是 对应的s[i]。此外注意添加一个超级原点 N+1,跟所有点进行下连通,保证图 阅读全文
posted @ 2014-01-14 13:36 KRisen 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 这个承认自己没看懂题目,一开始以为题意是形成环路之后走一圈不会产生负值就输出,原来就是判断负环,用SPFA很好用,运用队列,在判断负环的时候,用一个数组专门保存某个点的访问次数,超过了N次即可断定有负环(其实我觉得=N次了就可以断定了,当然这样是保险起见)。。。。别人还有用SPFA+DFS做的,还效率相当高,我还没怎么弄明白是怎么回事。。。还有,我突然想到讲最短路的时候说迪杰斯特拉不能用于有负权的图,这是为什么。。我还没想明白,先去睡觉吧。。。。关于dijstla为什么不能有负权,昨晚躺下之后就想明白了,dijstla最大特性在于其把当前d值最小的点给灰化了,下次不用再访问了,而负权如果存在, 阅读全文
posted @ 2014-01-13 22:48 KRisen 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 题意:一栋摩天大楼从0层到K层,有N部电梯,每个电梯都有自己的运行速度,此外,对于某个电梯来说,并不是每一层都会停,允许在某一层进行电梯换乘,每次换乘固定消耗60秒,最终求从0层去K层的最短时间,如果不能到达,输出 IMPOSSIBLE确实是个隐式图问题,建图并不难,只要图建好了,进行最短路即可,难点在于电梯换乘,因为电梯换乘额外消耗60s因此,不能简单的指向该层节点,结果明显不对。。。。所以我自己就想出了一个多线程的最短路,每个电梯独立建一个图,分别以0-99,100-199,200-299.。。。因为最多有五部电梯,因此,只需要最多400-499一共500个点即可,独立图中点是指相同层数, 阅读全文
posted @ 2014-01-13 19:31 KRisen 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 不可多得的好题目啊,我看了别人题解才做出来的,这种题目一看就会做的实在是大神啊,而且我看别人博客都看了好久才明白。。。还是对状态压缩不是很熟练,理解几个位运算用了好久时间。有些题目自己看着别人的题解做出来完全不是一个味,毕竟别人给你提供了思路,比如这道题,刚看题目,怎么就能转移到是用最短路搜索呢。。其次,好多注意事项这些自己想出来才真正是锻炼思维。否则总是踩着别人的脚印在行走还有就是不得不说一说UVA上的题目,又长又难懂。。。实在是弄得我好烦。说说这个题目,能够发现是个隐式图是第一个难点,然后怎么进行搜索就是关键了,状态压缩确实是个好东西,通过二进制来表示当前bug是否被修复,1 为bug,0 阅读全文
posted @ 2014-01-12 20:26 KRisen 阅读(660) 评论(0) 推荐(0) 编辑
摘要: 第一次做状态压缩DP,是因为按照DP清单里面碰到了状态不确定的DP,我当时只能用回溯做,但是时间卡得想死啊,后来又连续碰到几个题目都需要用状态压缩,所以好好学了一下,说到这里,必须要检讨一下昨天的自己,其实这道题目本应该昨天完成的,自己磨磨蹭蹭昨天非常地心不在焉,弄得昨天完全没完成训练任务。加上这个位运算这里确实有点难懂,我之前很少接触位运算,但是用状态压缩的时候位运算贯穿整个代码,所以理解起来比较难还好找到了一个讲解非常详细的博文,这才理解了http://www.2cto.com/kf/201208/146894.html这个博文写的非常好还有这个题目跑了900+MS,在学校的VJ上有100 阅读全文
posted @ 2014-01-11 11:41 KRisen 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 求出大矩阵里面全为0的最大子矩阵我自己用的个挫DP写的,感觉写的不是很好,其实可以再优化,DP想法就是以 0 0 到当前 i j 为整体矩阵考虑,当前 i j就是从 i-1 j或者 i,j-1那里最大化,然后因为要求最大子矩阵,还得自从j往上扫一遍。。总之好像有点挫#include #include #include using namespace std;int dp[105][105][2];int s[105][105];int g[105][105];int n,m,i,j,k;int main(){ while (scanf("%d%d",&n,& 阅读全文
posted @ 2013-12-26 15:05 KRisen 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 这道题目我一开始想错了,觉得只要排好序,再从头到尾把可以相互交换的进行下交换就可以了。。。事实证明是错的。正确的解法比较巧妙,而且写法非常好,值得学习首先,要注意的一个规律是,假如最大的颜色数字出现的次数 为 c, c超过了n的一半,则必定无法将所有的人的颜色交换成两两不同的,而且此时颜色不同的人的数目也已经出来了就是 (n-c)*2,于此,也很容易得出,一旦c没有超过n的一半,则肯定能够把所有人都排成不一样的,(先把相同颜色的找另一类相同颜色的互换,某一类不够了,再找另一类的来继续补充一下即可)此时的答案就是n。进一步分析,如果是第一种情况,则一个很巧妙的处理方法就是从1到n遍历,如果当前i 阅读全文
posted @ 2013-12-11 22:21 KRisen 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 这个题目挺有意思的,给定 起终点,要你求车,象,王分别最少要走多少步车横竖都能走,而且每步任意走几格,所以它是最容易处理的,如果在同行或者同列,就是1,否则就是2象要找下规律,象任意对角线都能走,而且每步任意走几格,这个时候,发现图上的黑白色块给了很大提示,如果两个本身在同一对角线,就是1,如果不在,就要判断下是否在同一色块,是就是2,否则,就走不到,输出0,至于判断是否为同一色块,非常简单,代码中给出。其实王也是非常简单的,八个方向都能走,但是每次只能走一步,只是我好脑残,连象的规律都找出来了,偏偏王还在一步步分情况,最后发现,其实不管是在八个方向内,还是不在八个方向上,最终走的步数就是 m 阅读全文
posted @ 2013-12-07 21:33 KRisen 阅读(254) 评论(0) 推荐(0) 编辑
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 25 下一页