POJ
文章平均质量分 81
满赋诸机
这个作者很懒,什么都没留下…
展开
-
POJ-1258 Agri-Net(最小生成树[Prim])
开始学最小生成树了,照着郭老师的代码敲了一边,第一次交还错了。。。不过发现了二维vector的clear()函数的正确使用方法原创 2015-08-19 11:17:58 · 465 阅读 · 0 评论 -
POJ-1860 Currency Exchange(Bellman-Ford)
由于本题是要求走一圈后,权值变大,所以更改Bellman-Ford的初始条件和更新条件,即可更改为求已s为起点的“最长路”,因为更新方法变了,所以每次能更新到的点必定是s点可达的点,即也再可兑换回s,所以只要用Bellman-Ford判断是否有“负权回路”即可关于讨论版后的数据:45 43 8 32.46000040 6 90.90 17.59 45.28 89.7029 18 37.97 55.13 84.48 52.8145 26 59.25 99.43 27.79 90.847 42 5原创 2016-05-07 13:10:08 · 770 阅读 · 0 评论 -
POJ-1459 Power Network (最大流[Ford-Fulkerson])
添加一个虚拟源点和一个虚拟汇点,添加源点到生产者的边(权值为生产者能生产的能量),添加消费者到汇点的边(权值为消费者能消费的能量),则转化为最大流模版题。刚开始用STL库的queue和priority_queue,结果都超时了,第一次被STL的慢坑住了。。。换成数组模拟的队列800ms AC原创 2016-05-07 16:44:10 · 621 阅读 · 0 评论 -
POJ-2186 Popular Cows (强连通分量[Kosaraju])
初次接触这方面的图论,知道的太少了,还不能看出如何转换,只能根据题解慢慢学习要做这题首先得了解一个定理:DAG中唯一出度为0的点,一定可以由任何点出发均可达(由于无环,所以从任何点出发往前走,必然终止于一个出度为0的点)可以先求出所有的强连通分量,并且将强连通分量缩成一个点,寻找出度为0的缩点,若其个数大于1,则有0个点满足题意;若其个数等于1,则缩点中所有的点都满足题意原创 2016-04-23 00:23:34 · 449 阅读 · 0 评论 -
POJ-3164 Command Network(最小树形图(有向图的最小生成树)[朱刘算法])
朱刘算法大致步骤:① 找到除根结点的所有点的最小权值入边(非自环)② 若存在除根结点的其他点无入边(非自环),则无最小树形图,否则继续③ 若不存在环,则返回当前权值和,否则将每一个环缩成一点④ 建立新图先做到简单点最小树形图,看完算法时,还想保留原图继续添加点和边的话,复杂度很高看了模板后,发现模板直接在原图的点和边操作,简单明了原创 2016-04-04 15:31:02 · 590 阅读 · 0 评论 -
POJ-1236 Network of Schools (强连通分量[Tarjan])
首先又得了解到一个定理:有向无环图中所有入度不为0的点,一定可以由某个入度为0的点出发可达。(由于无环,所以从任何入度不为0的点往回走,必然终止于一个入度为0的点)则可以处理出所有的强连通分量,并将强连通分量缩成一点,新图中入度为0的点数即为第①问答案若要新图成为一个强连通分量,则不存在出度或入度为0的点,则两者中的较大值为第②问答案注意:如果新图只有一个强连通分量,则第②问答案为0原创 2016-04-23 10:17:58 · 365 阅读 · 0 评论 -
POJ-1523 SPF (割点[Tarjan])
找不到练习寻找割点的裸的简单题了,感觉写法与讲义还是有些差别,但是明白之后发现这样写更简洁明了割点:①若u为树根,且u有多余一个子树 ②若u不为树根,且存在(u,v)为树枝边(或称父子边,即u为v在搜索树中的父亲),使得dfn[u]<=low[v]桥:当(u,v)为树枝边,且满足dfn[u]<low[v](前提是其没有重边)原创 2016-04-23 20:48:44 · 372 阅读 · 0 评论 -
POJ-2117 Electricity (割点[Tarjan])
用Tarjan算法算出原图的连通分量数 以及 删除每一点后,其所在的连通分量会形成的连通分量数然后枚举每一点作为删除的点,取最大值即可原创 2016-04-23 21:24:02 · 347 阅读 · 0 评论 -
POJ-3177 Redundant Paths (边双连通分量[Tarjan])
点双连通分量:不存在割点的连通分量边双连通分量:不存在桥的连通分量(即任意两点互相可达的路径有不同的两条)大致方法:可以求出所有的桥,把桥删掉。然后把所有的边双连通分量求出来,显然这些边双连通分量就是原图中的双连通分量。把它们缩成点,然后添上刚才删去的桥,就构成了一棵树。在树上添边使得树变成一个双连通分量即可。可以统计该树度为1的叶子节点(设共有x个),则答案为:(x+1)/2原创 2016-04-24 09:19:05 · 703 阅读 · 0 评论 -
POJ-3352 Road Construction (边双连通分量[Tarjan])
这题思路与POJ-3177一样,但是是弱化版,没有重边,可以直接用POJ-3177的代码AC原创 2016-04-24 10:12:12 · 511 阅读 · 0 评论 -
POJ-3436 ACM Computer Factory (最大流[Ford-Fulkerson])
初看题目,感觉非常难懂,也很难想到最大流,手动跑了几组数据后,发现题目就是求从p元组(0,...,0)到p元组(1,...,1)的最大流,然后就可以建图跑最大流即可首先,将每台机器的输入输出分别看成1个点,则这两点之间存在流量为q的有向边其次,添加可能会添加的边,即将各机器的输出与其他机器的输入比较,如果输出符合输入标准,则添加流量为无穷的边然后跑最大流即可,注意每次只记录添加的边即可最后直接输出结果刚开始统计路径的方法有点问题,但是随机了很多数据都找不出错,最后终于找到一组数据原创 2016-05-09 17:01:48 · 834 阅读 · 0 评论 -
POJ-1322 Chocolate(生成函数)
第一反应是概率DP,但是直接推复杂度是O(n*c)又想到可以用矩阵快速幂优化,复杂度为O(c^3*logn),一看数据范围发现比直接递推没有优化多少看了一下网上这种做法的题解,发现都是卡时间过或者TLE也发现由于精度要求低,所以当n大于某一常数时,概率只与奇偶有关原创 2016-06-09 11:02:45 · 1307 阅读 · 0 评论 -
POJ-1678 I Love this Game!(博弈论)
这种\\\\(博弈DP\\\\)以前做过很多次,但是这回状态是不连续的就不知道怎么转移了,其实只用记忆化搜索即可。原创 2016-07-20 11:05:27 · 800 阅读 · 0 评论 -
POJ-1067 取石子游戏(威佐夫博弈)
直接是:威佐夫博弈。 这个过于繁琐,只能运用现成的结论。 设奇异局势(必败局势)为(a[i],b[i]),则有a[0]=b[0]=0;a[k]=前面未出现的最小自然数,b[k]=a[k]+k 具体求解公式:a[k]=k∗1+5√2,b[k]=a[k]+k=k∗3+5√2奇异局势的性质: 1.任何自然数包含在且仅包含在一个奇异局势中 a[k]>a[k−1],b[k]=a[k]+k>a[k−1]+k−1=b[原创 2016-07-20 16:31:21 · 1809 阅读 · 0 评论 -
POJ-3259 Wormholes(负权回路[Bellman-Ford])
只以1号点为源点做Bellman-Ford即可判断图中是否存在负权回路(该负权回路不一定以1号点为起点)例如:13 0 22 3 13 2 1这组数据会输出YES调试时能发现,dis[2],dis[3]每次都在更新,但是是在INF的基础上更新,所以要判断1号点是否可打2,3时,要判断dis[2],dis[3]是否 大于 图中的最大权值和才行原创 2016-05-07 11:42:34 · 849 阅读 · 0 评论 -
POJ-1062 昂贵的聘礼(Bellman-Ford)
完全忘了Bellman-Ford和SPFA了,只会Dijkstra和Floyd...赶紧复习一下Bellman-Ford貌似就是单源版的Floyd,还是挺简单的...本题点权只在最短路算完时才算入,所以直接算最短路即可,不过需要注意:这题有在一条最短路上的任意两点的等级差距不大于m原创 2016-05-07 10:05:42 · 643 阅读 · 0 评论 -
HDU-1501 (POJ-2192) Zipper (DFS||DP)
要不是放在dp专题里面,我还一直以为只能dfs做看到一个dp的解法,才明白如何进行状态转移设dp[i][j]表示串a的前i个字符与串b的前j个字符是否能形成串c的前i+j个字符,若dp[i-1][j]&&a[i]==c[i+j]或dp[i][j-1]&&b[j]==c[i+j]时,dp[i][j]才为true我写的最外层循环是枚举串c的字符,内存分别枚举串a和串b的字符,这样方便初始化和理解(串c的下标从1开始),但有一个常数原创 2016-04-20 21:17:55 · 424 阅读 · 0 评论 -
POJ-2553 The Bottom of a Graph (强连通分量[Tarjan])
注意理解题意即可(只有理解了,才能看懂样例...)满足题意的v点有两种情况:①对于任一点w,v可达w,且w可达v,即v、w互相可达,满足该情况的点在同一个强连通分量中(且该强连通分量不与其他点连通)②对于任一点w,v均不可达w,满足该情况的点是出度为0的点所以可以先求出所有的强连通分量,并缩点,则只剩下情况②,则所有出度为0的缩点都满足题意,即缩点中的点都满足题意原创 2016-04-25 23:34:10 · 431 阅读 · 0 评论 -
POJ-2082 Terrible Sets (单调栈)
今天知道有单调栈这种数据结构用单调递增栈很容易就能求出以h[i]为最小值的区间大致过程如下:若h[i]<s[top].h,则不停弹出栈顶元素,直至h[i]>=s[top].h,且此h[i]的起始位置为弹出的最后一个元素的起始位置;否则直接进栈,其起始位置为i原创 2016-04-10 15:46:15 · 437 阅读 · 0 评论 -
HDU-1506 (POJ-2599) Largest Rectangle in a Histogram (单调栈)
以前看过dp的解法,求区间的原理和单调栈差不多,但是得扫2遍理解了单调栈及其应用的问题后,发现这些问题都变的好简单原创 2016-04-10 15:59:32 · 682 阅读 · 0 评论 -
POJ-3494 Largest Submatrix of All 1’s(单调栈)
第一眼看反应是DP,以前做过求最大的正方形的,立刻爽快的交了一发,WA,仔细一看,本题是求最大的矩形,然后就不知道DP怎么做了,但是有影响以前听过DP的解法只好按照题解的单调栈做法写(解法太巧妙了)对每一行进行类似HDU-1506(POJ-2599)的单调栈做法,小矩形的高度h[j]就是从该行开始往上的最大的连续1的个数,进行完最后一行后,即可求得最大的矩形原创 2016-04-10 16:53:53 · 1646 阅读 · 0 评论 -
POJ-3252 Round Numbers (数位DP)
写完后看了很多题解,发现大家用数位DP都要用dfs,感觉直接循环也很好理解啊...设dp[i][j][0]表示长度为i,含有j个0且最高位为0的数字的个数;dp[i][j][1]表示长度为i,含有j个0且最高位为1的数字的个数初始:dp[1][0][1]=1;//长度为1,含有0个0且最高位为1的数字个数为1 dp[1][1][0]=1;//长度为1,含有1个0且最高位为0的数字个数为1然后通过状态转移,预处理出所有的结果最后再在函数中进行从高位到低位的按位统计差不多有点感觉了原创 2016-05-10 12:44:20 · 924 阅读 · 0 评论 -
POJ-1734 Sightseeing trip (无向图最小环[Floyd])
依旧按照无向图最小环的floyd算法求,由于要输出路径,所以更新最短路时也要更新路径开始只用了pre数组输出答案,一直WA,发现后来的最短路会更改pre数组,所以每次更新最小环时也要更新最小环的路径原创 2016-04-15 18:05:35 · 535 阅读 · 0 评论 -
POJ-3744 Scout YYF I (概率DP&&矩阵快速幂)
设dp[i]表示安全到达点i处的概率,则状态转移方程为:①点i处有雷,dp[i]=0;②点i出无雷,dp[i]=dp[i-1]*p+dp[i-2]*(1-p)由于雷坐标的范围很大,而雷的数量很少,所以需要用矩阵快速幂对无雷的路段进行优化原创 2016-04-29 11:09:34 · 466 阅读 · 0 评论 -
POJ-2096 Collecting Bugs (概率DP)
设dp[i][j]表示在j个子部件中找到i种bug时离最终状态的期望的天数,则有dp[n][s]=0则dp[i][j]可由转化为下列四种状态:①dp[i][j]:表示在已有bug的j个子部件中找到已发现过的bug,概率为:(i/n)*(j/s)②dp[i+1][j]:表示在已有bug的j个子部件中找到一个新的bug,概率为:((n-i)/n)*(j/s)③dp[i][j+1]:表示在一个新的子部件中找到一个已发现过的bug,概率为:(i/n)*((s-j)/s)④dp[i+1][j+1]:表示在一原创 2016-04-29 15:14:55 · 347 阅读 · 0 评论 -
POJ-3071 Football (概率DP)
设dp[i][j]表示在第i轮,队伍j胜出的概率则dp[i][j]=∑(p[j][k]*dp[i-1][j]*dp[i-1][k]),k为在第i轮可能会和j比赛的队伍然后不知道怎么计算什么队伍之间会在第i轮比赛看了题解后发现可以运用位运算,队号从0开始观察规律(以0号队伍为例):第一轮:(0,1)第二轮:(0,2),(0,3)第三轮:(0,4),(0,5),(0,6),(0,7)……第i轮能够比赛的队伍,他们从第i+1为开始均相同,而第i位均不同,所以可以对队号先右移i-1位,再让其中一个原创 2016-05-01 21:02:18 · 348 阅读 · 0 评论 -
POJ-3114 Countries in War (强连通分量[Tarjan]&&Dijkstra)
由于互相可达的点是0花费,所以将强连通分量缩成一个点,就变成一道裸的最短路,再跑一边Dijkstra即可原创 2016-04-26 14:16:44 · 604 阅读 · 0 评论 -
POJ-2151 Check the difficulty of problems (DP)
可以用dp求得每支队伍做出k道题的概率设dp[i][j][k]表示第i只队伍在前j题中做出k题的概率则状态转移方程为:dp[i][j][k]=(1-p[i][j])*dp[i][j-1][k]+p[i][j]*dp[i][j-1][k-1];由于是每个队伍相互独立事件,所以直接相乘即可总是想着正面求解,而忘了正难则反的原理首先统计每个人至少做出一题的概率:prob_1=1-∏dp[i][m][0];再统计每个人做出的题目数目均在1~n-1之间的概率:prob_2=∏(∑dp[i][m][k])原创 2016-05-02 00:23:34 · 363 阅读 · 0 评论 -
POJ-1456 Supermarket (贪心)
大致思路:贪心即可,每次挑选价格最高的物品,看在保质期内是否有未被占用的天,如果有在占用该天卖出该物品,否则找下一个即可。可以用并查集的思想,更新离保质期最近的合法天刚开始pre数组和vis数组初始化的范围不对,导致WA了很多次。原创 2016-05-02 12:53:45 · 619 阅读 · 0 评论 -
POJ-3281 Dining (最大流[Ford-Fulkerson])
首先,一头牛必须吃到一种食物,喝到一种饮料才算数,所以食物和饮料同时连到一头牛身上是不可以的(可以看做并联吧),然后就想到拆点,但是拆点后怎么连都还是是并联,完全没想到换一下顺序...最终还是看了一下思路:牛拆成两个点牛1和牛2,牛1到牛2有权值为1的边(保证一头牛只计入一次),源点到食物有权值为1的边(保证一种食物只用一次),食物到牛1有权值为1的边,牛2到饮料有权值为1的边,饮料到汇点有权值为1的边(保证一种饮料只用一次)然后就可以开心的跑最大流了原创 2016-05-14 00:05:18 · 416 阅读 · 0 评论 -
POJ-2234 Matches Game(尼姆博弈)
直接是:尼姆博弈。 好多都只是给出结果,并没有给出尼姆博弈为什么可以使用异或运算。 这个解释证明了异或和为00是必败点。代码#include <c原创 2016-07-21 10:18:49 · 1667 阅读 · 0 评论