摘要: http://poj.org/problem?id=1068给你一系列的左右括号的两个表示方法,p和W.然后是有P向W转换Pi表示第i个右括号前边有几个左括号;Wi表示第i个右括号如果要找匹配的话,要找从后往前数几个左括号与它匹配。View Code #include <iostream>#include <cstdio>#include <cstring>#define maxn 25using namespace std;int fb[maxn],fw[maxn];//存储两种匹配int ct[maxn],len[maxn];//记录长度,ct变而len 阅读全文
posted @ 2012-02-25 20:07 E_star 阅读(260) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=3295首先分别将p,q,r,s,t的值饭分别枚举出来,然后运用递归将问题不到缩小,并判断是否为永真式。View Code #include <iostream>#include <cstdio>#include <cstring>#define maxn 107using namespace std;char str[maxn];int flag[10];int start;int juage(){ int p,q; switch(str[++start]) { case 'K': p = 阅读全文
posted @ 2012-02-25 19:29 E_star 阅读(255) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2506这道题和原来课本上的一个递推题相似,不过这里有了两种选择,2*2 和2*1f[n] = f[n-1] + f[n-2]*2 ;View Code #include <iostream>#include <cstdio>#include <cstring>#define maxn 1007using namespace std;int f[255][maxn];int tmp[maxn];//记录f[n-2]*2后的结果int len[maxn];//记录每个数的长度void muilty(int * 阅读全文
posted @ 2012-02-25 16:06 E_star 阅读(339) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2524题目分类是分治,我不知道怎么用分治。并查集1y.注意这里每个人最多有一个宗教信仰View Code #include <iostream>#include <cmath>#include <cstdio>#include <cstring>#define maxn 50007using namespace std;int f[maxn];int find(int x){ if (x != f[x]) f[x] = find(f[x]); return f[x];}void Union(i 阅读全文
posted @ 2012-02-24 21:51 E_star 阅读(178) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2586刚开始看了很长时间都没看懂题意,最后还是看了discuss里面讲的才懂了。开始还把连续五个月都会抱亏的题意理解错了。我理解成1 - 5 6 - 10 11-12 了。。心想怎么会一年8次呢。最后才看到原来是1-5 2-6 3 -7 4 - 8 5 -9 6 -10 7 -11 8 -12这8次报表时都是亏空的。而每个月可能盈利,也可能亏空所以这样就会导致全年盈利的情况了。这题的贪心在于,这8次中,出了第一次每一次都会和上一次重复利用连续的四个月的盈亏情况,所以我们贪心的让他们共用亏空,这样就会使盈利的月份增多,所以能够获得最大利润。V 阅读全文
posted @ 2012-02-24 21:21 E_star 阅读(329) 评论(0) 推荐(0)
摘要: float的范围为-2^128 ~ +2^127,也即-3.40E+38~ +3.40E+38;double的范围为-2^1024 ~ +2^1023,也即-1.79E+308~ +1.79E+308 阅读全文
posted @ 2012-02-24 19:43 E_star 阅读(202) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=1328这个题目就是每个岛屿对应一个雷达区间,然后确定好雷达区间后,然后在将区间的s或者e从小到大排序,然后贪心。第一种按s从小到大排序:View Code #include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#define maxn 1007using namespace std;struct node{ int x,y;}tagp[maxn];struc 阅读全文
posted @ 2012-02-23 22:12 E_star 阅读(5860) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2965和pku1753 一样的思路,可是自己敲了三四遍还是不出结果。就叫比较细心的GTL来帮忙看了看。。结果最重要的地方终于检查了出来,就是再change函数里面对要改变的那一点改变了两次。唉,,这错误找出来不容易啊。。。思路:将每个点压缩进一维数组,然后每个点枚举他的两种状态(改变或者不改变),最后得出结果。View Code #include <iostream>#include <cstdio>#include <cstring>#define maxn 10#define inf 99999999 阅读全文
posted @ 2012-02-23 19:29 E_star 阅读(193) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=1753以前做过的一道题目,可是拿过来在做就没思路了。还是看了以前做的。唉。。悲剧啊。。思路:首先将整个4*4的棋盘,压缩到一个一维数组中,然后对每一个点的两种状态(翻转或者不翻转)枚举。枚举完所有的情况,最后查看是否能够达到目标。View Code #include <cstdio>#include <cstring>#include <iostream>#define maxn 10#define inf 99999999using namespace std;char str[maxn][maxn]; 阅读全文
posted @ 2012-02-22 21:14 E_star 阅读(245) 评论(0) 推荐(0)
摘要: 这次的CF还有上次hdu的比赛让我发现自己在遇到那种简单体时,心理总是静不下来,老是还没整理好思路就开始敲代码,结果弄得Bug无数,还有就是那种中等难度的题目,思路还是不够成熟,有时能够做出,有时要想半天,对于难题没有接触过的当然还是不会了。自己做题还是太少,接触到的知识还是太少,对于每个算法的理解还是不够熟练。所以最近几个周要坚持按照计划来,扎实的造好每一步。加油。。。悲剧,从第一次做cf开始rating一直是降得。。。唉。。。好吧,只能加油了》http://codeforces.com/contest/152/problem/A简单题,分别给出了n个人的m科课程的分数没找出拥有这科最高分的 阅读全文
posted @ 2012-02-21 19:18 E_star 阅读(311) 评论(0) 推荐(0)
摘要: 才开始的时候研究过他,不过当时只是记住的模板刷了几个模板题后一位会了。过上一段时间就忘了。唉。。这次好好研究研究。。http://baike.baidu.com/view/501081.htm补充:最大匹配: 图中包含边数最多的匹配称为图的最大匹配。完美匹配: 如果所有点都在匹配边上,称这个最大匹配是完美匹配。最小覆盖: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数最小路径覆盖:用尽量少的不相交简单路径覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i& 阅读全文
posted @ 2012-02-16 14:51 E_star 阅读(470) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=3694给你一个存在桥的无向连通图,每次增加一条边,问每次增加边之后还剩多少个桥。朴素的办法就是每输入一次tarjan求一次桥的个数,肯定会tle;正确的做发是,首先求出改图的桥的数量,在tarjan的过程中里用并查集把不是桥的边缩为一点,然后得到一棵树,每加入一条边,就肯定会形成一个环,,然后删除环中石桥的边,最后得出总的桥的数量。删除的过程就是检查是否石桥是就有cut--;View Code #include <cstdio>#include <cstring>#include <vector>#inc 阅读全文
posted @ 2012-02-15 20:48 E_star 阅读(292) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=3177http://poj.org/problem?id=3352把3177的代码直接贴到3352也就a了。3177:题意是给一个图,注意这里有重边,问至少添加多少条边才能使是该图成为边双连通图。首先求出该图中的割边(桥)然后删除桥,剩下的就都是边双连通分量了,然后将其缩成一个点,再把桥加上就死形成了一棵树,边连通度为1.记录叶子节点数ans,则至少添加(ans+1)/2个节点才能使原图成为边双连通图。此时low[]值相同的是同一个连通分量,注意在求tarjan是不能染low[i]取到low[ifather]的值,这样整个图的low[i]就 阅读全文
posted @ 2012-02-15 15:17 E_star 阅读(333) 评论(0) 推荐(0)
摘要: 1062* 昂贵的聘礼 枚举等级限制+dijkstra1087* A Plug for UNIX 2分匹配1094 Sorting It All Out floyd 或 拓扑1112* Team Them Up! 2分图染色+DP1125 Stockbroker Grapevine FLOYD1135 Domino Effect 最短路1149* PIGS 网络流1161* Walls floyd1201 Intervals 差分约束1236* Network of Schools 强联通1251 Jungle Roads MST1273 Drainage Ditches 最大流1274 Th 阅读全文
posted @ 2012-02-15 11:20 E_star 阅读(307) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=1904很多人都说是二分匹配题目,可是我还没有接触他呢。悲剧啊。不过这道题要求强连通分量做。king有n个儿子,这边有n个beautiful mm,每个儿子可以喜欢多个mm,但是只能和一个结婚。最后king的wizard给出了一个完美匹配。可是国王比较定眼,想知道每个儿子所有可以结婚的情况。儿子编号(1,n) mm编号(n+1, 2*n),儿子喜欢mm就建立一条边 u ->v 如果儿子取了mm 在建立一条边 v->u然后求强连通分量,在一个强连通分量里的是他所有可能结婚的情况View Code #include <iostr 阅读全文
posted @ 2012-02-15 09:08 E_star 阅读(185) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3836缩点后求每个点的入度与出度,最后结果是max(入度为0的点的个数,出度为0的点的个数);只要整个图形成强连通图就可以证明了。。今天真二把tarjian模板写错了,贡献了好几次wa竟然没有检查出来。。。。唉。。。View Code #include <cstdio>#include <cstring>#include <iostream>#include <vector>#include <stack>#define maxn 20007usin 阅读全文
posted @ 2012-02-14 17:31 E_star 阅读(211) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2553题意才开始理解错了一位G中的任意一点都能到达v且v也能达到该点时v才属于bottom;如果这样最后出度为0的比为一个了,而且整个图都要缩为一点了。其实题意是说w属于G如果v->w ==>(推出)w->v则v属于bottom。先缩点,然后统计出度为0的点,然后输出所有出度为0的点包含的点。如果出度不为0,那么v->w退不出w->v这里的DAG比存在出度为0的点。。。所以都骂出题的二逼啊。。。View Code #include <cstdio>#include <cstring>#i 阅读全文
posted @ 2012-02-14 16:35 E_star 阅读(303) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2186将所有最大连通分量缩点,然后统计缩点后每个点的出度,出度为0的肯定就是了可是这个点可能是缩出来的,所以要记录这个点真正包含的点数。如果出度为0的点大于1个说明不存在View Code 稍微尝试了一下stl的vector和stack#include <cstdio>#include <cstring>#include <vector>#include <stack>#include <iostream>#define maxn 10017using namespace std; 阅读全文
posted @ 2012-02-14 15:08 E_star 阅读(287) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=1236N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输,问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。2,至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。首先求出该图所有的强连通分量,将其缩为一点,因为对于强连通分量,任意两点都能互相可达,只要给DAG(强连通分量)中的任意一点都能互相到达。缩点后然后统计每个点的入度与出度,入度为0的点肯定是A的答案,而对于答案B则是max(入度为0 阅读全文
posted @ 2012-02-14 10:04 E_star 阅读(309) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2117给出一个森林,求删掉一个点后,形成的连通块的个数。和pku1523一样的意思,只不过这里是森林了。。还要加上原来的连通块数。注意:这里的当m == 0 时要单独考虑,因为要删掉一个点,所以== n-1 而单纯的求的话是n了。。。View Code #include <cstdio>#include <cstring>#include <iostream>#define maxn 10010using namespace std;struct node{ int v; int next;}g[4*ma 阅读全文
posted @ 2012-02-13 15:14 E_star 阅读(275) 评论(0) 推荐(0)