随笔分类 - 图论
摘要:和UVA - 1658 Admiral如出一撤,就是跑一个流量为2的最小费用流。主要来学习一下用dijkstra处理负边权来增广,主要思想是每个点都维护一个顶标h[v],叫做v的势。对于每个边ei(u,v)(u到v的有向边),修正它们的边权w[i] 为w'[i] = w[i] + h[u] - h[...
阅读全文
摘要:分析:这类问题的一遍描述,把一些对象分成两组,划分有一些代价,问最小代价。一般性的思路是,把这两组看成是S点和T点,把划分的代价和割边的容量对应起来求最小割。把S和可模版tem之间到达关系看作是属于核A,对称地,T对应B。模块tem安装在A上代价Ai,就是割断tem和T,连一条tem到T的容量为Ai...
阅读全文
摘要:分析:数学模型是三个集合A,B,C,(a,b,c)构成一个匹配。因为图一个点只能匹配一次,把a拆点a',a",在可以匹配的点上连边,s - b - a' - a" - c - t,然后最大流就好了。/**************************************************...
阅读全文
摘要:分析:这是一个时间和门的二元组(t,d)和人p匹配的问题,当我们固定d0时,(t,d0)匹配的人数和t具有单调性。t增加看成是多增加了边就行了,所以bfs处理出p到每个d的最短时间,然后把(t,d)和p连边,按t从小到大枚举点增广就好了。无解的情况只有一种,某个人无论如何都无法出去。/*******...
阅读全文
摘要:题目:POJ 3041 Asteroidshttp://poj.org/problem?id=3041分析:把位置下标看出一条边,这显然是一个二分图最小顶点覆盖的问题,Hungary就好。挑战:输出一组可行解。构造,已知二分图的两个点集U和V,s-U-V-t,在最大匹配的残留网络里,选从s出发能到达...
阅读全文
摘要:把有向图修改成无向图,并保证每条边的流量守恒并满足有向容量(即abs(flow(u,v) - flow(v,u)) using namespace std;const int N = 301,M = N*(N-1);int n,m;int hd[N],nx[M],to[M],cap[M],ect;i...
阅读全文
摘要:每次操作是独立的,而且顺序并不影响,作用在同一个结点上的d可以叠加,所以令x(u) = sigma(dui).最后就是要确定所有的x(u)。因为m越大,满足条件的边就越少,二分答案m。对于一条边a->b,可以列出一个不等式d(a,b) +x(a)-x(b)>=m,移项可得x(b)-x(a)0,意味着...
阅读全文
摘要:Hold Your HandTime Limit: 1500/1000 MS (Java/Others)Memory Limit: 65535/102400 K (Java/Others)Total Submission(s): 169Accepted Submission(s): 38Proble...
阅读全文
摘要:用spfa,和dp是一样的。转移只和最后一个吃的dish和吃了哪些有关。把松弛改成变长。因为是DAG,所以一定没环。操作最多有84934656,514ms跑过,实际远远没这么多。脑补过一下费用流,但是限制流量不能保证吃到m个菜#includeusing namespace std;typedef p...
阅读全文
摘要:dfs一遍,维护当前连续遇到的喵的数量,然后剪枝,每个统计孩子数量判断是不是叶子结点。#includeusing namespace std;const int maxn = 2e5+5;int a[maxn];int head[maxn],nxt[maxnm) return; int ch ...
阅读全文
摘要:生成树的上的一个非根结点对应一条生成树上的边,然后这个结点的子树上连出去的边就对应去掉这条边的割,然后就可以对树外的边求LCA,在LCA上标记,利用这个信息可以算出有多少条边在子树上,以及有多少条边不再子树上。其实可以更进一步,非叶子结点一定不会比叶子结点更优,连的边只不会减少。所以只要统一叶子结点...
阅读全文
摘要:Elven PostmanTime Limit: 1500/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 0Accepted Submission(s): 0Problem D...
阅读全文
摘要:TravelTime Limit: 1500/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 46Accepted Submission(s): 20Problem Descri...
阅读全文
摘要:PondsTime Limit: 1500/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 0Accepted Submission(s): 0Problem Descripti...
阅读全文
摘要:一个叫差分约束系统的东西。如果每个点定义一个顶标x(v),x(t)-x(s)将对应着s-t的最短路径。比如说w+a≤b,那么可以画一条a到b的有向边,权值为w,同样地给出b+w2≤c,a+w3≤c。那么a到c的最大差就受这些不等式约束,对应着图中的最短路。这个边多,不要用vector存,满了以后重新...
阅读全文
摘要:二分法+spfa判负环。如果存在一个环sum(wi)using namespace std;const int maxn = 51;struct Edge{ int v,nxt; double w;};vector edges;int head[maxn];#define PB push...
阅读全文
摘要:从终点逆推,d[u]表示进入u以后剩下的货物,那么进入u之前的货物数量设为y,d[u] = x,那么y-x=ceil(y/20.0)=(y-1)/20+1=(y+19)/20。(y-x)*20+r=y+19,0≤r≤19,即19*y=20*x+r,根据题意y应该尽量小,x的部分是不能变动的,所以y=...
阅读全文
摘要:题意:在连通图中,求一条边使得加入这条边以后的消除的桥尽量多。在同一个边双连通分量内加边肯定不会消除桥的,求边双连通分量以后缩点,把桥当成边,实际上是要选一条最长的链。缩点以后会形成一颗树,一定不存在环否则和桥的定义矛盾,求树上的最远点对。树上的最远点对用dp TLE了,实际上两次dfs就行了,第一...
阅读全文
摘要:很多的边会被删掉,需要排除一些干扰进行优化。和UVA - 1279 Asteroid Rangers类似,本题最关键的地方在于,对于一个单源的最短路径来说,如果最短路树上的边没有改变的话,那么最短路肯定是不会变的,所以只要枚举删掉最短路树上的边。这样的时间复杂度就能过了。#includeusing ...
阅读全文
摘要:求出家到其他点的最短路径,题目的条件变成了u->v不是回头路等价于d[u]>d[v]。然后根据这个条件建DAG图,跑dp统计方案数,dp[u] = sum(dp[v])。#includeusing namespace std;const int maxn = 1001, maxm = 2002;st...
阅读全文

浙公网安备 33010602011771号