IT民工
加油!

随笔分类 -  POJ

上一页 1 2 3 4 5 6 下一页
刷集训手册
POJ 2553 The Bottom of a Graph
摘要:求图的底,就是找出经过缩点后的图中出度为0的点,每个点中的元素就是图的底。然后有序输出,不要多输出空格。将tarjan算法敲的比较熟了。/*Accepted 468K 47MS C++ 1864B 2012-07-30 14:44:59*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 5050;const int MAXM = MAXN * MAXN;int first[MAXN], next[MAXM], v[MAXM], cnt, top, col, e, N, M, 阅读全文
posted @ 2012-07-30 14:51 找回失去的 阅读(176) 评论(0) 推荐(0)
POJ 2186 Popular Cows
摘要:这道题求被其他牛欢迎的牛的个数。原图是一个有向图,将其缩点后,每一个强连通分量是一个点,找出出度为1的点的个数,如果大于1,那么无解。如果等于1,则输出这个强连通分量中点的个数。/*Accepted 736K 110MS C++ 1999B 2012-07-30 11:49:48*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 10010;const int MAXM = 50050;int first[MAXN], next[MAXM], v[MAXM], cnt, t 阅读全文
posted @ 2012-07-30 11:57 找回失去的 阅读(179) 评论(0) 推荐(0)
POJ 1236 Network of Schools
摘要:先将图用tarjan缩点,形成无环图。然后求出其中入度为0和出度为0的点的个数ans1和ans2。然后根据题意,入度为0的点需要添加一条边,所以第一问的结果就是ans1。这里的点都是图的缩点。第二问取ans1和ans2大的那个。因为我们先将入度为0的点和出度为0的点连接是最省的,剩下有点的话也得连接,所以是两者的最大值。http://hi.baidu.com/scameeling/item/b135831094ec756771d5e815强连通分量tarjan的介绍/*Accepted 192K 0MS C++ 2109B 2012-07-30 10:53:03*... 阅读全文
posted @ 2012-07-30 11:07 找回失去的 阅读(161) 评论(0) 推荐(0)
POJ 3352 Road Construction
摘要:要使游客不受道路施工的影响,能够到达各个景点,那么就要使图是至少一个双连通分量,因为施工时只对一道路施工。这样模型就建立了:给定一个连通的无向图G,至少要添加几条边,才能使其变为双连通图。同样用tarjan缩点,然后求出缩点树的叶子结点个数,再按照公式计算。/*Accepted 220K 0MS C++ 1783B 2012-07-30 09:53:31*/#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;const i 阅读全文
posted @ 2012-07-30 10:03 找回失去的 阅读(159) 评论(0) 推荐(0)
POJ 3177 Redundant Paths
摘要:大致读完题后,可以理解为给定一个连通的无向图G,至少要添加几条边,才能使其变为双连通图。参考staginner大牛的写法,将边双连通分量缩点,题再次被转化为“至少在缩点树上增加多少条树边,使得这棵树变为一个双连通图”。首先知道一条等式:若要使得任意一棵树,在增加若干条边后,变成一个双连通图,那么至少增加的边数=(这棵树总度数为1的结点数+1)/2计算叶子结点要注意:两两枚举图G的直接连通的点,只要这两个点不在同一个【缩点】中,那么它们各自所在的【缩点】的度数都+1。注意由于图G时无向图,这样做会使得所有【缩点】的度数都是真实度数的2倍,必须除以2后再判断叶子。也可以将度为2的点当作叶子,这样就 阅读全文
posted @ 2012-07-29 16:42 找回失去的 阅读(214) 评论(0) 推荐(0)
POJ 2942 Knights of the Round Table
摘要:参考了题解将这题的代码写了一遍,整体来说收获还是比较大的。用邻接矩阵g存骑士的关系,相互憎恨就连一条边。然后建立图g的补图,这里用邻接表会更好,表示这些骑士是可以相邻的。然后用tarjan算法求补图的双连通分量,注意题目要求骑士g要在奇圈中。传送门:http://blog.csdn.net/lyy289065406/article/details/6756821有详细分析过程,膜拜下。/*Accepted 8468K 1266MS C++ 2516B 2012-07-29 15:29:42*/#include<cstdio>#include<cstring>#in... 阅读全文
posted @ 2012-07-29 15:49 找回失去的 阅读(244) 评论(0) 推荐(0)
POJ 1703 Find them, Catch them
摘要:第一次做这种类型的并查集。re数组代表所在的类,因为只能从当前情况来判断两个人是不是在一个犯罪集团。所以D操作时保证两个人的re不同。两个有相同的根结点,代表情况已知,否则为情况未知。/*Accepted 948K 360MS C++ 1190B 2012-07-27 17:16:34*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 100111;int p[MAXN], re[MAXN];int n, m;char ans[3][20] = {"In diff 阅读全文
posted @ 2012-07-27 17:26 找回失去的 阅读(186) 评论(0) 推荐(0)
POJ 1251 Jungle Roads
摘要:先将字母转换成数字,然后建图。建完图用堆优化的prim,写这道题花了不少时间,居然写成了dij,搞混了。/*Accepted 180K 0MS C++ 1594B 2012-07-27 15:57:47*/#include<cstdio>#include<cstring>#include<cstdlib>#include<queue>#include<iostream>using namespace std;const int MAXN = 1 << 5;const int inf = 0x3f3f3f3f;bool vi 阅读全文
posted @ 2012-07-27 16:02 找回失去的 阅读(118) 评论(0) 推荐(0)
POJ 2362 Square
摘要:一道简单的搜索剪枝,居然写了一个小时,首先判断棍子长的和是否能被四整除以及最长的棍子是不是大于边长(和的四分之一)。将棍长按照从长到短排序,记录搜索的边,构成三条边就是构成了一个正方形。/*Accepted 164K 235MS C++ 1396B 2012-07-27 14:30:28*/#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;const int MAXN = 1 << 7;int m, a[MA 阅读全文
posted @ 2012-07-27 14:35 找回失去的 阅读(129) 评论(0) 推荐(0)
POJ 1724 ROADS
摘要:因为有花费的限制,所有存最短路的数组改为d[i][j],代表走到i点还剩余j的钱的最短路的值,relax时做一个剪枝,第一个条件是剩余钱数大于通过当前边所需的钱,第二,即将更新的值要小于当前到达N点的最短路的值。在更新最短值的时候,走过一条边要将钱数也更新,即剩余money减去过路费。/*Accepted 1936K 188MS C++ 1701B 2012-07-27 12:00:50*/#include<cstdio>#include<cstring>#include<cstdlib>#include<queue>#include<io 阅读全文
posted @ 2012-07-27 12:13 找回失去的 阅读(183) 评论(0) 推荐(0)
POJ 1860 Currency Exchange
摘要:SPFA判断是否存在最长路,只要存在负权环就存在最长路,两者是等价的。将N中货币看成N个点,从A点到B的最大可能值为(A点的当前值-AB的手续费)* AB的汇率。/*Accepted 428K 16MS C++ 1452B 2012-07-27 10:21:22*/#include<cstdio>#include<cstdlib>#include<cstring>#include<queue>#include<algorithm>#define cal(i, j) ( (val[i] - c[i][j]) * r[i][j])usin 阅读全文
posted @ 2012-07-27 10:33 找回失去的 阅读(228) 评论(0) 推荐(0)
POJ 1125 Stockbroker Grapevine
摘要:求任意两点之间的最短路径最大值的最小值,听起来有点绕口,不过数据结构课程设计里面给出了这个概念,叫做偏心度,就是一个点到途中任一点的距离要最小,先用floyd求出任意两点之间的最短路,再枚举每一个点到其他点的最短距离,找出其中最大那个,和其他的最大值来比较,找出全图的最小值。/*Accepted 168K 0MS C++ 1217B 2012-07-26 15:42:29*/#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace st 阅读全文
posted @ 2012-07-26 15:50 找回失去的 阅读(273) 评论(0) 推荐(0)
POJ 1062 昂贵的聘礼
摘要:这道题比较经典了。建图时用g[0][i]表示不用替代物品获得编号为i的物品所需的金币,g[j][i]代表用编号为j的物品替代获得编号为i的物品所需要的金币,然后在M的限制范围内进行所有可能的交易,最后获得其最小值,一共需要做m次dij。/*Accepted 228K 0MS C++ 1600B 2012-07-26 15:16:49*/#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<queue>using namespace s 阅读全文
posted @ 2012-07-26 15:22 找回失去的 阅读(181) 评论(0) 推荐(0)
POJ 2253 Frogger
摘要:这道题是要求石头1到石头2的最长跳跃距离的最小值,用了堆优化的dij来做,想不到好久没写最短路,这玩意都写的不顺了。也可以用floyd求出任意两个石头间的距离,也就是跳跃距离,然后找到1到2的最长路径的最小值。/*Accepted 636K 0MS C++ 1453B 2012-07-26 11:51:06*/#include<cstdio>#include<cstring>#include<cstdlib>#include<queue>#include<cmath>#include<iostream>using name 阅读全文
posted @ 2012-07-26 12:00 找回失去的 阅读(155) 评论(0) 推荐(0)
POJ 2528 Mayor's posters
摘要:这道题的离散化很巧妙,参考了胡浩大神的代码。自己先理解下http://www.notonlysuccess.com/大神的博客/*Accepted 1120K 79MS C++ 2109B 2012-07-24 17:40:47*/#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1const int MAXN = 11111 阅读全文
posted @ 2012-07-24 17:47 找回失去的 阅读(181) 评论(0) 推荐(1)
POJ 2777 Count Color
摘要:颜色种类不大于三十,可以用二进制来加速。每个二进制代表一种颜色,用位或运算来更新颜色记录,最后求和只要看结果有几个二进制为1就行。/*Accepted 2224K 297MS C++ 2156B 2012-07-24 16:39:26*/#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 阅读全文
posted @ 2012-07-24 16:46 找回失去的 阅读(212) 评论(0) 推荐(0)
POJ 3468 A Simple Problem with Integers
摘要:线段树的成段更新,区间求和基础题。/*Accepted 4284K 1750MS C++ 1946B 2012-07-24 14:01:14*/#include<cstdio>#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1typedef long long LL;const int MAXN = 100005;LL add[MAXN << 2];LL sum[MAXN << 2];void PushUp( int rt ){ sum[rt] = sum[rt & 阅读全文
posted @ 2012-07-24 14:07 找回失去的 阅读(218) 评论(0) 推荐(0)
POJ 2182 Lost Cows
摘要:题意:有n个数,从1到n,打乱顺序,现输入n-1个数,第i个数表示序列中第1到i-1的数比第i个数小的个数.要求输出该序列。从后往前每次求“第k小”,如样例,第五个数前面有0个比它小的,它一定是1,将1在线段树中删除,再看第四个数,前面有1个比它小的,它就是2、3、4、5中第2小的,以此类推。线段树求第k小一般思路:数组中存放区间元素个数,自顶向下,左边个数小于k就走右边,并用k去掉左边个数,否则走向左边,直到叶子结点就是第k小。/*Accepted 264K 47MS C++ 1061B 2012-07-24 12:19:42*/#include<cstdio>... 阅读全文
posted @ 2012-07-24 12:27 找回失去的 阅读(333) 评论(0) 推荐(0)
POJ 3264 Balanced Lineup
摘要:求区间最大值减去最小值的值,用线段树再好不过了,这里线段树的功能就是查询区间的最大值和最小值,没有单点更新。#include<cstdio>#include<algorithm>using namespace std;#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1const int MAXN = 500107;int Max[MAXN << 2], Min[MAXN << 2];int N, Q;void PushUp( int rt){ Max[r 阅读全文
posted @ 2012-07-24 11:05 找回失去的 阅读(155) 评论(0) 推荐(0)
POJ 1789 Truck History
摘要:将字符串0到n编号,然后建图。G[i][j]是边的权值等于两个字符串的差异。然后求出最小生成树的权值。第一次写堆优化的prim算法,堆优化的好处在于避免重复更新已经存在在生成树中的点的值,在n比较大的时候效果会很明显。/*Accepted 16128K 610MS C++ 1519B 2012-07-24 10:34:28*/#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cstdlib>#include<iostream&g 阅读全文
posted @ 2012-07-24 10:41 找回失去的 阅读(190) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 下一页