上一页 1 2 3 4 5 6 7 8 9 10 ··· 29 下一页
摘要: 第一次试手,就知道求割边,结果各种TLE,还改了向量为邻接表。其实问题是没有想到缩点之后是一棵树,之后每条树边都是割边,一遍dfs./**State: HDU2242 281MS 1604K 2899 B*题目大意:* 给一个有重边的无向图,然后要求判断能否删除一条边使图分为* 两个部分。图中每个点都有权重,如果可以分成两个部分,求这* 两个部分差值的最小值。*解题思路:* 先用tarjan缩点,把强连通分量都缩成点,因为强连通分量是不能* 删除一条边使图分开的。缩点之后就是一棵树,之后在这棵树上进行* 记忆化... 阅读全文
posted @ 2012-08-16 01:23 cchun 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 这道题目主要是构图,之后就是水水地求连通分量个数了,用广搜,用深搜,用并查集都行,不过并查集效率要高。/**State: HDU1198 46MS 372K 2322 B C++ *题目大意:* 给定A~K个固定的小方块,方块中有水管,然后要求凑这些小方块成为* 一个大矩形,求最后形成的连通分量数目。*解题思路:* 主要是构图比较特别。枚举每个小方块构图,最后用dfs查连通分量数即可。* 图可构为无向图。*解题感想:* 好像用map慢了许多。第三次优化用了并查集,果然0ms了,连建图都省了*/并查集版本:View Code ... 阅读全文
posted @ 2012-08-16 01:20 cchun 阅读(223) 评论(0) 推荐(0) 编辑
摘要: /**State: HDU3861 46MS 1468K 3001 B C++ *题目大意:* 给定一个含有n个点的有向图,然后要求把这个有向图分为多个图,* 要求如果图中有两个点能够互相到达的,必须把它们分为同一个图。* 然后要求分割出来的图中,任意两个点之间一定可以互达。*解题思路:* 题目要求如果图中两个点可以互达,要分为同一个图,那么可以先* 求出强连通分量,然后缩点。之后就是一个ADG,用笔画了很久,发现* 一个ADG要分为多个分量,然后每个分量重每两个点有路径通过,最* 最小分量,其... 阅读全文
posted @ 2012-08-16 01:16 cchun 阅读(394) 评论(0) 推荐(0) 编辑
摘要: /**State: HDU1269 46MS 1428K 1364 B*题目大意:* 给一个n个点,m条边的有向图,判断该图是否为强连通图*解题思路:* 用tarjan,但是要注意该图可能有连通分量。*/View Code 1 #include <iostream> 2 #include <vector> 3 #include <stdio.h> 4 #include <stack> 5 using namespace std; 6 7 const int MAX = 10005; 8 vector<int> vec[MAX]; 9 阅读全文
posted @ 2012-08-16 01:14 cchun 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 为了那个秘密,我要努力好不好~~A题:/**题目大意:* 给一个由正小六边形组成的大六边形,其六条边为a, b, c, a, b, c对称的。* 输入a, b, c,求正小六边形的个数。*解题思路:* 要有拆分的思想,把恶心的东西拆成人类可以理解的简单东东。算a*b + a*c + b * c* 最后发现原来中间3条长度为a, b, c的线重叠了一次,而他们又把一个点重叠了1次,* 所以公式如下。*/View Code #include <iostream>#include <cmath>using namespace st... 阅读全文
posted @ 2012-08-15 21:56 cchun 阅读(338) 评论(0) 推荐(0) 编辑
摘要: /**State: 4054 0MS 276K 1990 B C++*题目大意:* 字符串处理,把大写变小写,小写变大写,然后用计算机内存的形式* 写出来。*解题思路:* 模拟吧,原来进制转换,可以写得很快的。*/View Code 1 #include <iostream> 2 using namespace std; 3 4 const int MAX = 5005; 5 char Hex[MAX][4]; 6 7 void deal16(int t, char ans[]) 8 { 9 ... 阅读全文
posted @ 2012-08-06 09:50 cchun 阅读(191) 评论(0) 推荐(0) 编辑
摘要: //ZOJ的类似题//State: ZOJ2083 C++ 0 188//题目大意:A和B轮流给n条线染色(A先),每人每次只能染一条// 线的一段(长度为2)。不能染色者为输。#include <iostream>#include <stdio.h>#include <cstring>using namespace std;const int MAX = 55;int sg[MAX];int get_sg(int n){ if(sg[n] != -1) return sg[n]; if(!n || n == 1) r... 阅读全文
posted @ 2012-08-04 16:50 cchun 阅读(206) 评论(0) 推荐(0) 编辑
摘要: /**State: ECNU 1328 Yes 236K 0MS C++ 0.96K*题目大意:* 给定red、green、blue三种长度分别为c、z、n的矩形条纹,要求* 用这三种矩形条纹来cover大小为p x 1的game board,第一个不能* 再cover的选手为输。问先手是否能赢。*解题思路:* 好像是变种了的博弈,想想,原来可以用sg来模拟,其实就是先拿掉一些,* 再把一堆变成两堆的那种Nim博弈。*/View Code 1 #include <iostream> 2 using... 阅读全文
posted @ 2012-08-04 16:34 cchun 阅读(210) 评论(0) 推荐(0) 编辑
摘要: /**State: 2604 140MS 252K 2286 B C++*题目大意:* 给一个长度为l的串,串中只有m跟f两种字符,可以组成2^l种,求* 不含fmf跟fff的数量。*解题思路:* 这种题目一看就是求递推式的。递推式的求导过程值得体会,想象一下。* f(l)代表长度为l的满足条件的串的个数,如果结尾为m的话,数量为f(l-1),* 如果结尾为f的话,那么前面只能是mf跟mm,mm可以由f(l-3)得来,而考虑* mf要考虑到mf的前面不能是f,否则就造成fmf不满足了。... 阅读全文
posted @ 2012-08-04 00:20 cchun 阅读(209) 评论(0) 推荐(0) 编辑
摘要: /**State: 3117 0MS 424K 1028 B C++*题目大意:* 求出第nth个fib数,要求大于8位的只输出前4位跟后4位。*解题思路:* 后四位可以用矩阵快速幂来求,但是根据模的特性,发现原来* 周期15000fib又会回来。所以可以用数组来保存这个循环节即可。* 而前四位可以用log10.来计算,原来就是每一个数都可以用科学* 计数法来表示,我们用log10来取出每一个数科学计数法的那几个* 决定位权数的值,然后要n位就乘以10^n.不过要注意精度问题哦。*/Vi... 阅读全文
posted @ 2012-08-03 11:27 cchun 阅读(426) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 29 下一页