ACM_POJ
JayYe
这个作者很懒,什么都没留下…
展开
-
POJ 1091 跳蚤 扩展欧拉函数 or 容斥原理
POJ 1091 好题!题意:要使得gcd(a1,a2,a3...,an,m) = 1 (1容斥原理:首先预处理出m所有的素因子,组合总数就是m^n,P(x) 表示由x个素因子乘积得到的数为gcd的总的组合数,所以由容斥原理可知ans = m^n - P(1) + P(2) - P(3) + ...扩展欧拉函数 : 参考自http://scturtle.is-原创 2013-06-05 18:38:53 · 1263 阅读 · 0 评论 -
poj 3177 Redundant Paths 边双连通
这道题和poj 3352差不多的,只不过有重边,这样的话其实不用管,对所有的边都建边就行了,不过貌似poj的数据很弱,反正对于2 21 22 1这种数据我是输出0的,别人的有输出1的都过了。#include #include const int maxn = 5005;const int maxm = 10005;struct EDGE{ int to, v原创 2013-07-29 12:45:29 · 738 阅读 · 0 评论 -
poj 1236 Network of Schools 强连通分量
题意:给你一个有向图,第一问:增加一个点至少需要加多少边使得该点能到达其他所有点。第二问:至少需要加多少边使得整个图变成一个强连通分量。对于第一问就很简单了,只需要求出缩点后入度为0的点的个数,对于第二问的话,需要求出缩点后入度为0的个数和出度为0的个数,较大值为答案。比如0出度大于0入度,这样把所有0出度的连到不为该节点祖先的其他子树的0入度节点上,画个图应该很明白。原创 2013-07-29 21:27:34 · 876 阅读 · 0 评论 -
poj 2186 Popular Cows 强连通
题意:有n头牛,某头牛可能会认为另一头牛受欢迎,现在给你m种关系,每种关系A B表示A认为B是受欢迎的,这种受欢迎有传递性,如果A认为B受欢迎,B认为C受欢迎,那么A认为C受欢迎,现在问你被其他所有人认为受欢迎的牛有多少头。对关系图缩点后,其实就是要求出度为0的强连通,如果这样的强连通大于1,那么就没有这样的牛。如果得到的是多个有向无环图,那么也没有这样的牛,其实这种情况已经被包括进来原创 2013-07-31 16:08:14 · 860 阅读 · 0 评论 -
POJ【数论/组合/博弈论】题目列表
转自 : http://hi.baidu.com/lydrainbowcat/item/f16e64103f8c5c088fbde44cPOJ【数论/组合/博弈论】题目列表原来的列表比较水,今天换了一个难一些的列表,重新开始做~红色的代表已经AC过,蓝色的代表做了但是还没过。这句话貌似在我空间里的每份列表里都有额。博弈论POJ 2234 Matc转载 2013-07-31 22:26:41 · 957 阅读 · 0 评论 -
poj 1523 SPF 无向图求割点
无向图求割点和块的模板题#include #include const int maxn = 1111;struct EDGE{ int to, next;}edge[maxn<<2];int head[maxn], iscut[maxn], dfn[maxn], low[maxn], subnet[maxn], E, time; void newedge(int原创 2013-07-28 11:22:36 · 1074 阅读 · 2 评论 -
poj 3352 Road Construction 边双连通缩点
题意:给你一个图,问至少需要加多少条路使得整个图成为边双连通。求出割边并缩点,可以得到一棵树,统计树上所有度为1的点数,最后的答案就是(cnt+1)/2,这个画个图就明白了。#include #include const int maxn = 1002;const int maxm = 1005;struct EDGE{ int to, next, vis;}原创 2013-07-28 17:00:43 · 797 阅读 · 0 评论 -
poj 2942 Knights of the Round Table 点双连通
圆桌骑士,记得小时候街机也有同名还蛮喜欢玩的游戏。题意:有n个骑士经常举行圆桌会议,商讨大事~每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置。如果发生意见分歧,则需要举手表决,因此参加会议的骑士数目必须是奇数以防止赞同票和反对票一样多。知道了哪些骑士相互憎恨之后,你的任务是统计有多少个骑士不可能参加任何一个会议。(题意来自刘汝佳白书)首先可以对不原创 2013-07-28 15:21:22 · 869 阅读 · 0 评论 -
poj 3131 Cubic Eight-Puzzle 双向广搜 Hash判重
双向广度搜索 + Hash判重, 挺不错的题目,很锻炼代码能力和调试能力~原创 2013-08-04 22:11:12 · 1448 阅读 · 0 评论 -
POJ 1322 Chocolate (dp or 组合数学母函数)
今天学了组合数学的母函数,发现其用处有时候真的会是很犀利原创 2013-08-10 19:50:04 · 1542 阅读 · 0 评论 -
POJ 2104 K-th Number (可持久化线段树)
可持久化线段树(又曰函数式线段树or主席树。。)今天比赛做到这种数据结构,顿时就跪了。。是我太懒。。一直没去学。。果断学之,思想简单犀利。贴个模板#include #include #include using namespace std;const int N = 100000+5;int ls[N*20], rs[N*20], cnt[N*2原创 2014-03-23 21:26:01 · 1080 阅读 · 0 评论 -
POJ 1811 Prime Test 素性测试 分解素因子
POJ 1811 Prime Test 素性测试 分解素因子原创 2013-09-25 19:04:00 · 1523 阅读 · 0 评论 -
poj 3252 Round Numbers 数位DP or 组合数学
POJ 3252题意 : 给你两个数 a 数位DP :刚开始这样搞得,dp[i][j],i代表第几个数 j代表可以弄几个0 ,被雷到了,就是搞不出,各种烦,后来改成dp[i][j][k],i代表几位,j代表前面有j个1,k代表前面有k个0组合数学 :首先对一个二进制有num位的数,首先处理出有num位的有多少个,然后处理出小于num位的数组合数原创 2013-06-05 13:52:02 · 1101 阅读 · 0 评论 -
poj 1942 Paths on a Grid 组合数学
POJ 1942题意 : 给你一个n*m的矩形格子,问你从左下角那个点到右上角那个点的走法有多少种,只能往后或者往上走雷到爆的一道水题,只是因为WA了10几次,到最后居然发现n和m同时为0才可以break。。。无语了,太水了我,,,#include #include using namespace std;#define LL __int64void solve(LL n,LL m){原创 2013-06-05 21:54:45 · 921 阅读 · 0 评论 -
POJ 1155 TELE 树形DP
题意:给你一棵树,root为电视台,每个叶子节点为潜在的用户,其他节点为为讯号传播的中转站,每条边都有权值,如果信号发送到某个叶子节点,将收到用户交的费用,但是经过的边都要消耗费用,问最多能发送到几个用户且不亏本,不赚不亏也算。对于每个节点,节点的子树都为一个背包,由此进行分组背包即可。#include #include #define INF 1111111111原创 2013-07-18 15:39:28 · 975 阅读 · 0 评论 -
POJ 2773 Happy 2006 二分 and 容斥原理 or 欧拉函数
POJ 2773题意 : 求与n互质的第k大的数容斥原理:1到m中与n互质的个数为 m - (与n不互质的数的个数) 于是根据容斥原理,首先求出n的所有的素因子,对于1到m,与n不互质的数为 m - (m以内所有一个素因子构成的因子的个数) + (m以内所有两个素因子构成的因子的个数) - (m以内所有三个素因子构成的因子的个数)。。。刚开始wrong answer了原创 2013-06-05 19:48:17 · 1538 阅读 · 0 评论 -
poj 2356 and 3370 鸽巢原理
题意 : 给你n个整数,取其中的任意个整数满足相加的和是n的倍数处理出前k个数的sum[k] (1 根据鸽巢原理,有n个余数 , 余数0 ~ n ,如果没有余数0,至少有两个余数相同,那么这两个sum相减得到的就是n的倍数POJ2365 code#include int a[11111] , sum[11111], vis[11111];int main()原创 2013-06-05 21:47:53 · 1071 阅读 · 0 评论 -
POJ 3904 Sky Code 容斥原理
POJ 3904题意 : 求给定的n个数中4个数的最大公约数为1的组合数刚开始看居然只有300不到的人A了,就认为可能不简单,原来做起来的话只是比较清楚的容斥原理。首先要求出每一个数的素因子,然后对于求出的素因子进行组合,加到vis[i][j]上,表示由i个素因子组合成的数j的个数。然后就是容斥原理,总的组合数为sum = n*(n-1)*(n-2)*(n-3)/24原创 2013-06-05 21:42:02 · 1502 阅读 · 0 评论 -
poj 2065 SETI 高斯消元
题意:给你一个p 和一个只有小写字母或者*的字符串,1 = a ,2 = b,0 = *,字符串长度为n,代表f(k) f (k) = ∑0aiki 求a[i] (0 这题的系数矩阵是范德蒙德行列式。。所以解集是唯一的。#include #include #include using namespace std;#define LL __int64int var ,原创 2013-06-04 23:58:05 · 917 阅读 · 1 评论 -
poj 1166 The Clocks BFS or 高斯消元
这种题一看到就可以想到暴力搜索,不过用高斯消元解同余方程组应该可以做,但我还是没做出来。听别人说是由于mod 是 4不是素数,所以高斯消元过程中对4取余会导致解集增大,过程中就不能取余了,但是好像消元后得到的解集也不是正确的,一直在疑惑中,希望路过的大牛们指点下如何用高斯消元解另外附上我很挫的bfs代码#include #include #include using na原创 2013-06-04 23:52:37 · 1121 阅读 · 0 评论 -
poj 1487 Single-Player Games 高斯消元
这题虽然做的人不多,其实还是很裸的高斯消元。题意还是很好理解的,比如对于第二个样例2a = (1 b)b = (4 a)我们可以得出 a = 0.5+0.5*b , b = 0.5*4+0.5*a,这样就可以建立方程组来解题。预处理有点麻烦,我是对于每个区间递归处理的,代码有点搓,但还是比较好理解的。前面由于精度问题没经验,被坑了好几次。。。还很水,希望快点强大起来!原创 2013-06-04 22:17:08 · 1386 阅读 · 0 评论 -
poj 1681 Painter's Problem 高斯消元
还是经典的高斯消元,和poj1753其实一模一样。要枚举自由变元得到最优解,不过这题不枚举自由变元使得自由变元都为0也能过,事实上必须要枚举的,数据太弱了~像1753不枚举自由变元的话就过不了。我写的是枚举自由变元的。#include #include #include using namespace std;int a[255][255] , x[255] ,xx[255]原创 2013-06-04 23:34:27 · 882 阅读 · 0 评论 -
poj 1830 开关问题 高斯消元
题意:给你n个开关,给定开关的初状态和要达到的末状态,并给出i j 代表操作i也会影响j。如果有可行方法,输出方法总数。否则输出“Oh,it's impossible~!!”。这样我们就可以很快根据给定的数据建立一个方程组高斯消元求解。我们求得的自由变元个数为k,可行方法自然就是(1#include #include #include using namespace st原创 2013-06-04 23:41:04 · 738 阅读 · 0 评论 -
poj 1222 EXTENDED LIGHTS OUT 高斯消元
高斯消元模板题#include #include #include using namespace std;int equ = 30 , var = 30;int a[33][33] , map[6][6] ,x[33];int dx[]={1,-1,0,0};int dy[]={0,0,1,-1};void debug(){ puts("debug"); for(i原创 2013-06-04 22:21:53 · 806 阅读 · 0 评论 -
poj 3185 The Water Bowls 高斯消元
经典开关问题,不过这回给出的是一行开关而不是矩阵开关。高斯消元枚举自由变元#include #include #include using namespace std;int n = 20;int a[22][22] , x[22], freex[22],xx[22];void debug(){ puts("debug"); int i,j; for(i = 0;i原创 2013-06-04 23:44:33 · 838 阅读 · 0 评论 -
poj 3695 Rectangles 线段树扫描线 or 容斥原理
POJ 3695题意 : 求矩形的面积并扫描线 : 直接线段树扫描线会超时,因为询问实在是太多了,必须要离散化,离散化如果还超时的话只能继续各种优化了,这里我把x边都预处理一下,就避免了询问里再排序容斥原理 :对于每一次询问处理出重合 1 到 r 次的面积(r 为每次询问的矩形数) , 然后进行容斥原理,这里我处理重合面积的方法是这样的,对于前两个矩形如果重合,原创 2013-06-05 21:45:07 · 1218 阅读 · 2 评论 -
POJ 1947 Rebuilding Roads 树形DP
题意:给你一颗树,问最少要去掉多少边才能得到一颗节点数为p的树把节点1当做根节点,对于每一个节点,dp[u][i]表示节点u保留i个点最少去边数,我是把子树一颗颗地加进去,所以初始的dp[u][1] = 0,以前我也做过,不过是令dp[u][1] = 节点儿子数+1,根节点的话 = 儿子数,因为根节点不需要去父亲的边了,这应该是通常的做法吧。#include #inclu原创 2013-07-18 22:23:15 · 817 阅读 · 0 评论 -
poj 1753 Flip Game 高斯消元
这题也是高斯消元的模板题,要枚举自由变元求得最优解。也可以直接暴力枚举,不过有技巧的是,只需要第一行枚举下,每行得到使得该行以上可以的状态,然后继续往下枚举。我是感觉直接高斯消元还简单明了点~#include #include #include using namespace std;int a[22][22] , x[22], xx[22], n = 4 ,var, equ原创 2013-06-04 23:30:11 · 987 阅读 · 0 评论