POJ
文章平均质量分 85
huanghongxun
这个作者很懒,什么都没留下…
展开
-
POJ 1459 Power Network 最大流
还记得这是第一次参加市选的题目。。 初一那时候Dinic调不出来。。。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int inf = 2147483647, N = 210, M = 40005;int level[N], n,原创 2016-04-04 00:55:34 · 523 阅读 · 0 评论 -
POJ 2296 Map Labeler 2-SAT 二分
有n个点,只能位于某个正方形的上或下边的中点上,所有正方形边长相等且不重叠,求最大边长。 二分答案。 如果某两个点的x坐标不小于边长就无所谓。 如果小于,就得考虑在上面下面的问题。 如果y坐标小于边长,那么就必须一个放上一个放下; 如果相等,一个上一个中,一个中一个下; 如果小于两倍边长,那么上、中上、中下、下。#include <cstdio>#include <cstring>#原创 2016-03-26 23:17:12 · 362 阅读 · 0 评论 -
POJ 3273 USACO 2007 Mar Monthly Expense 二分答案
长度为n的序列分成m块是每块数字之和的最大值最小。 二分答案。 如果按给定和的最大值依次分超过了m块,数字就小了。 否则数字就大了。 正确性怎么证都行。。#include <cstdio>int main() { static int d[100005]; int n, m, i, ma, s, l, r, mid, c; while (scanf("%d%d",原创 2016-03-26 23:49:45 · 686 阅读 · 0 评论 -
POJ 2112 Optimal Milking 最大流 二分答案
有K个能挤M头奶牛的挤奶机和C头奶牛,告诉一些挤奶机和奶牛间距离,求最优分配方案使最大距离最小。显然是二分答案。接下来考虑如何判定。 为了限制挤奶机发给m头牛,以及一头牛只能分配给1台挤奶机,源点连向挤奶机,容量m,牛连向汇点,容量1,距离小于二分的最大距离的 挤奶机-牛 对,连边,容量1(其实设成多大都无所谓的),跑出来最大流=c(满流?)说明方案可行。#include <cstdio>#in原创 2016-04-09 10:09:13 · 664 阅读 · 0 评论 -
POJ 2455 Secret Milking Machine 最大流 二分答案
源汇为1,n的无向图求最小的路径上最大边使存在T条不重叠的路连通源汇。显然二分答案最大边长,判定时只加入满足最大边长的边。注意是无向边。。数据:http://contest.usaco.org/FEB05_6.htm#include <cstdio>#include <cstring>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i原创 2016-04-09 10:42:15 · 702 阅读 · 0 评论 -
POJ 3084 Panic Room 最小割
有一些房间靠门连通,如果门被锁起来那么门就是单向的,否则是双向的,求最少锁起来的门数使某些房间和另外一个房间不连通。最小割。。#include <cstdio>#include <cstring>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)using namespace std;const int inf = 0x3f3f原创 2016-04-09 11:07:06 · 443 阅读 · 0 评论 -
POJ 2699 The Maximum Number of Strong Kings 最大流 枚举
待坑#include <cstdio>#include <cstring>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)using namespace std;const int inf = 0x3f3f3f3f, N = 128, M = 8192;int level[N], cnt, cur[N], v[M], w[M]原创 2016-04-09 12:01:34 · 327 阅读 · 0 评论 -
POJ 3968|UVALive 4992|HDU 3761|UVA 1475|Jungle Outpost|二分|半平面交
有n个瞭望台,形成一个凸的n多边形。瞭望台的保护范围就是凸多边形内。敌人进攻会炸毁一些瞭望台使得总部暴露在剩下瞭望台凸包之外。你的任务是选择一个点作为总部使得最少需要炸坏的瞭望台总数尽可能多。输出此时敌人需要炸毁的瞭望台数量。vjudge真是个好地方,4倍经验唾手可得一开始想了个O(n2)O(n^2)的真是作死。。 嗯nn这么大应该是O(nlogn)O(n\log n)的。 二分答案。原创 2016-04-26 10:03:10 · 911 阅读 · 0 评论 -
POJ 2987 Firing 最小割(最大权闭合子图)
最大权闭合子图。。。闭合子图满足在子图内的任意点在原图中存在出边总是指向该闭合子图。 如果添加了超级源汇,那么这个图由一个割被分成了两个集合[S,T],且T是闭合子图。 最小割! 让我们来推导一下最大权闭合子图的解决方法。 令xix_i表示点i是否在闭合子图中,0在,1不在。 那么答案很显然了: max{∑max{0,1−xi}⋅wi−∑<i,j>∈Emax{0,xj−xi}⋅∞}\ma原创 2016-04-09 19:42:39 · 407 阅读 · 0 评论 -
POJ 3648 Wedding 2-SAT
一对夫妻不能对着坐,一些人不能对着坐,求可行方案。 显然夫妻可以算作一个状态,于是2-SAT。。#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define sqr(i) ((i)*(i))#define ms(i) memset(i,0,sizeof原创 2016-03-26 19:26:34 · 523 阅读 · 0 评论 -
POJ 3678 Katu Puzzle 2-SAT
和上一篇差不多,代码稍多#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define rep(i,j,k) for(i=j;i<k;++i)#define sqr(i) ((i)*(i))#define ms(i) memset(i,0,sizeof(原创 2016-03-25 23:14:24 · 477 阅读 · 0 评论 -
POJ 1966 Cable TV Network 最小割
求无向图的最小点割集?最近有点神经质,什么都想用数学求解。。。最优方案显然是割点集合将图分为两部分。 因此考虑为每个点标号,可以划分为S集合、T集合、以及两个都在。 两个集合都在的点即属于割点集。 标号S集合的为0、T集合的为1,但是割点不容表示,因此每个点需要两个变量来表示:x′ix_i'表示是否在S集合,0表示在;x″ix_i''表示是否在T集合,1表示在。 对于每条边,显然边的两端点必原创 2016-04-04 15:08:14 · 536 阅读 · 0 评论 -
POJ 1815 Friendship 最小割
和POJ 1966差不多? http://blog.csdn.net/huanghongxun/article/details/51056665#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int inf = 0x3f3f3f3f, N = 405, M = 10005;in原创 2016-04-04 17:44:49 · 509 阅读 · 0 评论 -
POJ 2553 The Bottom of a Graph 强连通分量
我一脸懵逼、、、、、 快速读入79ms。。scanf 47ms。。 PE了一次233。题目的这个if真的好魔性。 缩点后无出边的都是符合题意的。#include <cstdio>#include <cstring>#define min(i,j) ((i)<(j)?(i):(j))#define ms(a, b) memset(a, b, sizeof(a))const int N =原创 2016-03-11 18:20:56 · 413 阅读 · 0 评论 -
POJ 2186 Popular Cows 强连通分量
统计能被其他所有点访问的点的个数。 这里建边是<a,b><a,b> 缩点以后没有出边的就是符合题意的,但是只能有1个连通分量没有出边。#include <cstdio>#include <cstring>#define min(i,j) ((i)<(j)?(i):(j))#define ms(a, b) memset(a, b, sizeof(a))const int N = 10001原创 2016-03-11 18:42:10 · 577 阅读 · 0 评论 -
POJ 1149 PIGS 最大流
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int inf = 2147483647, N = 1005, M = 10005;int level[N], n, cnt = 0, v[M], w[M], p[M], h[N], q[原创 2016-04-05 11:10:02 · 297 阅读 · 0 评论 -
POJ 1236 Network of Schools 强连通分量
求一个有向图从几个点出发可以遍历整个图、以及至少加几条边使整张图强联通。缩点以后,显然入度为0的点的个数就是第一问的答案。 然后第二问答案显然是入度为0和出度为0的个数的最大值,即出入度为0的点间连条边就可以了。Garbow好像比tarjan快?反正双联通也只会写Tarjan。。#include <cstdio>#include <cstring>#include <algorithm>us原创 2016-03-12 00:34:17 · 585 阅读 · 0 评论 -
POJ 1637 Sightseeing tour 最大流
判断混合图是否是欧拉图。一个有向图是欧拉图if and only if每个节点的入度=出度。 由于一条无向边只能通过一次,最终经过这条边的时候总会有个方向,如果能为每条无向边定方向,使图满足上述条件那么混合图就存在欧拉图。可以先随便定向,然后找出需要改向的边,使最终出入度相等。显然存在出入度差不为偶数的点的图不可能是欧拉图。那么此时对于每个点存在入度与出度,表示为inx;outxin_x;out_原创 2016-04-05 21:02:14 · 513 阅读 · 0 评论 -
POJ 3693 Maximum Repetition Substring 后缀数组
bzoj挂了后顿时感到人生无光。Maximum repetition substringTime Limit: 1000MS Memory Limit: 65536K Total Submissions: 8600 Accepted: 2612DescriptionThe repetition number of a string is defined as the maximu原创 2016-02-18 00:00:05 · 383 阅读 · 0 评论 -
POJ 2774 Long Long Message 后缀数组/后缀自动机
用分隔符连接2个字符串,并且跨字符串的height才对答案有贡献。 回忆一下当时的程序。。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define rep(i,j,k) for(i=j;i<k;i++)#define MAXN 200050int n, num[MAXN], z[M原创 2016-02-16 23:22:25 · 514 阅读 · 0 评论 -
POJ 3017|Cut the Sequence|动态规划|单调队列
给定一个数列{an}\{a_n\},任意将连续的aia_i分块,使所有块的和都不超过MM,最小化各块的最大值的和。dp[i]=min{dp[j]+max{a[j..i−1]}} dp[i]=\min\{dp[j]+\max\{a[j..i-1]\}\} 其中∑i−1k=jak≤M\sum_{k=j}^{i-1} a_k\leq M 时间复杂度是O(n2)O(n^2),通过打表我们可以发现决策单原创 2016-04-26 18:21:48 · 1076 阅读 · 0 评论 -
POJ 3470|Walls|线段树
网格上有N(<=5e4)堵墙,有M(<=5e4)只鸟,其会选择最近的那堵墙撞晕,求鸟撞到各堵墙的次数。考试时给的中文翻译不忍直视。。貌似还是从某题解直接抄过来的。。直接看英文了。。 然后就在POJ上排#13了。。首先离散化一下。。 然后因为只能上下左右4个方向飞情况类似,这里我们只需要讨论一个方向。考虑向上飞的情况,我们人为添加一条下边界扫描,同时维护横着的墙,显然,如果遇到了新的墙,肯定目前其原创 2016-04-27 10:32:30 · 1400 阅读 · 0 评论 -
POJ 2033|SPOJ ACODE|Alphacode|动态规划
SPOJ:http://www.spoj.com/problems/ACODE/题目翻译A和B希望给对方发送聊天信息并且加密数据传输,他们讨论后希望这样加密数据: A:“让我们用一种十分简单的加密方式:令字符’A’的编码为1,’B’的编码为2,以此类推,直到’Z’的编码是26。” B:“mdzz,假设我发给你单词’BEAN’,加密后为25114,但是解密的可能结果有很多种!” A:“你还是to原创 2017-08-29 21:29:29 · 353 阅读 · 0 评论 -
POJ 1363|Rails|栈
题目大意1~n,n个数字依次入栈,询问是否能按给定顺序出栈。输入输入包含多组数据,每组数据包含多行。 第一行一个整数n。 接下来每行n个整数,表示给定的出栈顺序。 如果只有一个整数且为0,表示该组数据结束。 如果n=0表示输入结束。输出对于每组数据输出多行,Yes表示可以按给定顺序出栈,否则No。 数据组间有一行空行。样例输入51 2 3 4 55 4 1 2 3066 5 4原创 2017-09-18 09:04:35 · 451 阅读 · 0 评论 -
POJ 2601|URAL 1047|Simple Caluculations|数学推导
http://acm.timus.ru/problem.aspx?space=1&num=1047题目翻译有一个N+2个元素的数列:a0,a1,⋯,an+1(1≤N≤3000,−2000≤ai≤2000)a_0,a_1,\cdots,a_{n+1}(1\leq N\leq 3000,-2000\leq a_i\leq 2000),并且满足 ai=12(ai−1+ai+1)−ci(i=原创 2017-10-17 19:29:53 · 316 阅读 · 0 评论 -
POJ 2368|URAL 1023|Buttons|博弈论
http://acm.timus.ru/problem.aspx?space=1&num=1023题目大意给定K(3≤K≤108)K(3\leq K\leq 10^8)个石子,一次最多取L(2≤L<k)L(2\leq L<k)个石子,问L最小取多少能使后手必胜。背景正如你所知道的,Yekaterinburg市夺得了2032年夏季奥运会的举办权。这允许作为比赛举办国的俄国能够修改一些比赛项目。所以为了原创 2017-10-03 22:54:10 · 405 阅读 · 0 评论 -
POJ 2352|URAL 1028|Stars|树状数组
http://acm.timus.ru/problem.aspx?space=1&num=1028题目大意棋盘中有n个棋子,一个棋子的等级定义为其左下的所有棋子的数目(包括正左方和正下方的棋子)。输出等级0~(n-1)的棋子的数目题目天文学家经常检查星图,即用一个点表示一颗星,一个平面表示宇宙,故每颗星都有自己的坐标。定义一颗星的等级为一些不高于且不在这颗星右边的星星的数目。天文学家希望知道每个星星原创 2017-10-03 22:59:42 · 310 阅读 · 0 评论 -
POJ 2358|URAL 1034|Queens in Peaceful Positions
原文地址:http://acm.timus.ru/problem.aspx?space=1&num=1034题目一个N×N(N≤50)N\times N(N\leq 50)的棋盘上有NN个皇后。我们认为这个棋盘的皇后摆放方案是和平的仅当没有一个皇后与其他皇后在同一行、同一列、同一斜线上(因为可以互相攻击)。你需要找出一些方案使得对于一个和平的摆放,只改变其中三个皇后的位置,新的摆放仍然是和平的。输入原创 2017-10-04 21:00:19 · 336 阅读 · 0 评论 -
POJ 2369|URAL 1024|Permutations|置换求循环节长度
题目我们注意到一些不可变集合(?)的置换是一个一对一的自我映射。更通俗地说,置换是重新排序集合的一种方法。举个例子:我们定义{1,2,3,4,5}\{1,2,3,4,5\}的置换为: 也就是说,我们定义置换P为:P(1)=4,P(2)=1,P(3)=5P(1)=4,P(2)=1,P(3)=5, etc. 那么P(P(1))P(P(1))的值为多少呢?显然P(P(1))=P(4)=2,P(P(原创 2017-10-05 09:35:09 · 364 阅读 · 0 评论 -
UVa 112|POJ 1145|Tree Summing|字符串处理|树的遍历
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=48题目描述Lisp是最早的高级编程语言之一,Fortran是现在还在用的最古老的语言之一(说得好像Lisp不是一样)。序列是Lisp语言的基础的数据结构,可以很容易地导出其他数据结构,比如树。 本题需要你解原创 2017-10-05 23:11:54 · 390 阅读 · 0 评论 -
POJ 3352|Road Construction|边双联通分量|Tarjan
POJ 3352 Road Construction至少加几条边使原无向图边双联通。 tarjan求出边双联通分量后缩点成一棵树。 那么一棵树要实现边双联通显然是叶节点间连边,所以边数是 ⌈leaf2⌉\left\lceil \frac{leaf}{2} \right\rceil#include <cstdio>#include <cstring>#include <algorithm>原创 2016-02-18 21:26:09 · 426 阅读 · 0 评论 -
POJ 3207|Ikki's Story IV - Panda's Trick|2-SAT
在圆上连m条边,可以在圆内或圆外,问是否存在可行方案使边不相交。讨论边之间的关系,为每条边建立2个节点,分别表示在圆内和圆外。显然通过边的端点易知是否必须两侧,如果是,那么添加限制,即分别连接两条边的圆内和圆外的表示点。如果存在某条边的两个点联通,那么就不存在可行方案。#include <cstdio>#include <algorithm>using namespace std;#defin原创 2016-03-25 18:37:12 · 463 阅读 · 0 评论 -
POJ 1509 Glass Beads 后缀自动机
求给定字符串s从哪个位置开始的循环同构串字典序最小。如果复制一遍s,发现其所有循环同构都是新字符串ss的长度为|s|的子串。 于是后缀自动机。。dfs,不断地走字典序最小的边,直到走了|s|次即可。 而且发现,不管怎么走,SAM都至少能走|s|次。因此一条路往黑里走即可。 然后我们需要知道状态的Right集合的最小值。 而我们知道,SAM主链上的状态(由last连接的),max值均为Righ原创 2016-04-14 20:47:19 · 433 阅读 · 0 评论 -
POJ 3744|Scout YYF I|概率DP
令dp[i]dp[i]表示到i的概率 显然有dp[i]=p×dp[i−1]+(1−p)×dp[i−1] dp[i]=p\times dp[i-1]+(1-p)\times dp[i-1] 然后状态转移很大,考虑矩阵优化。 显然有 [dp[i−1]dp[i−2]][p1−p10]=[dp[i]dp[i−1]] \begin{bmatrix} dp[i-1]&dp[i-2] \end{bma原创 2016-04-28 18:14:22 · 524 阅读 · 0 评论 -
POJ 1129 Channel Allocation 图的染色 最大团
%%% http://www.cnblogs.com/zhj5chengfeng/archive/2013/07/29/3224092.html题意:对图染色,要求相邻节点不能同色,问最多要多少种颜色。其实应该是个平面图来着。。四色定理还没用呢。。不管那么多了。。首先,最少需要颜色种数的瓶颈在什么地方?自然是完全图,两两相邻,那么完全图的颜色种数自然是完全图的点数。那么对于一个原创 2016-02-11 15:09:55 · 596 阅读 · 0 评论 -
POJ 1830|开关问题|高斯消元|异或方程组
自由元有两种取值而且相互不影响,乘法定理可得#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define FOR(i,j,k) for(i=j;i<=k;++i)#define rep(i,j,k) for(i=j;i<k;++i)const int dx[] = {-1, 1, 0,原创 2016-04-22 17:10:30 · 606 阅读 · 0 评论 -
POJ 1222|Extended Lights Out|高斯消元|异或方程组
其实挺惊讶的咋没A这题。。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define FOR(i,j,k) for(i=j;i<=k;++i)#define rep(i,j,k) for(i=j;i<k;++i)const int dx[] = {-1, 1, 0, 0};cons原创 2016-04-22 16:08:37 · 461 阅读 · 0 评论 -
POJ 1741|BZOJ 1468|Tree|树分治
求树上距离不超过K的点对数。 一条链有2种情况。 一是经过根;二是在子树中。 为了排除情况二,我们统计两端点不在同一子树中的。 可以先统计所有,再统计在同一子树中的。 于是可以对所有点距离排序,然后扫一遍统计即可。 http://blog.sina.com.cn/s/blog_6d5aa19a0100o73m.html#include <cstdio>#include <algorit原创 2016-03-23 22:55:03 · 635 阅读 · 0 评论 -
POJ 3245|Sequence Partitioning|动态规划|单调队列
题意真是难懂。。一个长度为NN的序列(每个元素是(ai,bi)(a_i,b_i)这样的数对),连续地分成若干组。每组左右边界是(l1,r1),(l2,r2),⋯,(lp,rp)(l_1,r_1),(l_2,r_2),\cdots,(l_p,r_p),满足li=ri−1+1,li≤ri,l1=1,rp=nl_i = r_{i − 1} + 1, l_i ≤ r_i, l_1 = 1, r_p = n。原创 2016-04-26 17:56:50 · 988 阅读 · 1 评论 -
POJ 2749|Building roads|2-SAT|二分答案
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define rep(i,j,k) for(i=j;i<k;++i)#define ms(i) memset(i,0,sizeof(i))const int N = 20005, M = 600000;原创 2016-03-27 00:11:07 · 628 阅读 · 0 评论