
===图论===
Loi_a
这个作者很懒,什么都没留下…
展开
-
bzoj1001 狼抓兔子 网络流(水)
这道题正解不是网络流,但是网络流(最小割)在这种图上跑得飞起,就能水(2016.8.12)。直接贴代码。#include<iostream>#include<cstdio>#include<queue>using namespace std;struct bian{ int to,cap;}b[6000005];int s,t;int fst[1000005],nxt[6000原创 2016-08-12 16:05:13 · 545 阅读 · 0 评论 -
bzoj 2055 80人环游地球 上下界费用流
这题像上下界网络流一样,把一条边拆成三条,其中原图中的边权值不变,连向超级源点和汇点的边权值改为0就可以。然后把边合并一下。答案为每条边最小容量*权值+建完图后最小费用流。#include<queue>#include<cstdio>#include<cstring>#include<iostream>#define maxn 405#define LL long longusing n原创 2017-03-30 14:20:28 · 471 阅读 · 0 评论 -
bzoj2654 tree 最小生成树+二分验证
给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。因为随着白色边权值同时增大或同时减小,最小生成树中白色数量也会增大或减小,所以可以二分一个值Mid,白色边同时加上Mid,求生成树中白边数量。然后调整上下界。#include<iostream>#include<cstdio>#include<algorithm>#define maxn 50005原创 2016-12-20 21:25:27 · 694 阅读 · 0 评论 -
bzoj1468 tree 点分治
给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K计算经过根的路径,既离根的距离之和小于K的点,然后递归处理不经过根的路径。这样会有一些重复,两点与根的距离之和小于K,但是路径不经过根,需要减掉。#include<iostream>#include<cstdio>#include<algorithm>#define maxn 80005using namespa原创 2016-12-20 19:16:06 · 500 阅读 · 0 评论 -
bzoj2599 Race 点分治
给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000树的点分治,用数组cnt[x]记录与根距离为x最小多少条边,然后每搜完一棵子树,再用这棵子树的信息来更新cnt,避免统计同一棵子树中的点对。#include<iostream>#include<cstdio>#include<algorithm>#define maxn 20原创 2016-12-21 20:28:52 · 517 阅读 · 0 评论 -
洛谷1341 无序字母对 欧拉路
#include<iostream>#include<cstdio>using namespace std;char a[4];int vis[55][55];int f(char s){ if(s>='A'&&s<='Z') return s-'A'+1; return s-'a'+27;}int cd[55];int jd[55],cnt;vo原创 2016-11-14 17:17:32 · 564 阅读 · 0 评论 -
noip2003 加分二叉树 dp
中序遍历中,一个节点子树是该点向左右扩展连续的一段。dp[x][l][r]是记录以x为根,l,r为左右端点的子树所产生的最大价值。记忆化搜索做。#include<bits/stdc++.h>#define LL long longusing namespace std;LL dp[35][35][35];LL a[35];int ch[35][35][35][2];LL dfs(int原创 2016-11-02 14:24:54 · 629 阅读 · 0 评论 -
noip2013 华容道 bfs+建图
这道题有多次询问,如果每次询问bfs做的话,会TLE。发现询问是在一张图上,所以可以对一些信息预处理。处理dis[x][y][k][h] ,代表x,y这个点的k方向上有空格,它想要走到h方向的最小步数。这东西可以n^2×4×4次bfs预处理。然后状态是dis[x][y][k]。状态之间转移一下,就变成了Spfa。 每次从起点跑到终点,统计下答案。注意数据中有起点终点相同的情况。#include<原创 2016-11-11 17:32:25 · 784 阅读 · 0 评论 -
noip2012 图论+贪心+二分
首先,这道题是有二分性质的,就是说时间放的越长,能切断的点就越多。然后就是贪心验证。 刚开始这样想的——对于每一次验证,按军队深度(与根之间的距离)从排序后, 1.一个点在给定时间内跑不到第二层,就尽量往上跑。 2.如果跑到第二层,就填上这一层。 3.如果跑到第二层,发现这点填过了,就跑到根,记录一下剩余时间。 这样之后bfs,没有填过的第2层由跑到根的点补一下。 调了一天,发现思路错了原创 2020-03-26 21:48:38 · 636 阅读 · 0 评论 -
NOIP2015 D2T3运输计划
常数是检验人傻的唯一标准…… 但是今天我要推翻这句话。 我这么机智,怎么还有巨大常数……#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#define Max(x,y) x>y?x:y;#define maxn 300005using namespace std;void read(int原创 2016-10-20 09:54:44 · 981 阅读 · 4 评论 -
poj3281 Dining 最大流
模板#include<iostream>#include<cstdlib>#include<queue>#include<cstdio>#include<cstring>using namespace std;queue<int> q;struct Edge{ int to,cap;}b[20005];int fst[505],nxt[20005],tot=1;int原创 2016-09-02 21:03:24 · 354 阅读 · 0 评论 -
bzoj 1066 蜥蜴 最大流
套路拆点,把石柱高度作为出点入点之间流量,最大流。#include<cstdio>#include<iostream>#include<queue>#include<algorithm>using namespace std;struct bian{ int to,cap,nxt;}b[64005];int fst[1005],tot=1;int cur[1005];voi原创 2016-09-26 17:14:06 · 414 阅读 · 0 评论 -
bzoj 1003 物流运输 DP+Spfa
一看到题目,吓了一跳,看到数据范围…… spfa(j,i)表示第j天到第i天可用点的最短路。 spfa(i,j) if(j!=0)dp[i]=min(dp[i],dp[j]+(i-j)*dis[m]+k); else dp[i]=min(dp[i],dp[j]+(i-j)*dis[m]);#include<cstdio>#include<iostrea原创 2016-09-26 17:05:17 · 599 阅读 · 0 评论 -
bzoj1051 受欢迎的牛 tarjan
存一个tarjan模板就跑。#include<iostream>#include<cstdio>#include<stack>using namespace std;int fst[10005],nxt[100005],to[100005];int tot=1;void build(int f,int t){ to[++tot]=t; nxt[tot]=fst[f];原创 2016-07-28 15:31:09 · 429 阅读 · 0 评论 -
bzoj1036 树的统计 树链剖分
又是一道裸题,刚学会树链剖分,存个模版。#include<iostream>#include<cstdio>using namespace std;struct bian{ int to;}b[60005];int fst[30005],nxt[60005];int tot=1;void build(int f,int t){ b[++tot].to=t; n原创 2016-08-16 15:31:28 · 471 阅读 · 0 评论 -
bzoj 2330 糖果 差分约束
#include<iostream>#include<cstdio>#include<queue>using namespace std;struct bian{ int to,d;}b[1120005];int fst[120005],nxt[1120005],tot=1;long long dis[120005],inf=214748364;void build(int原创 2016-09-22 21:45:32 · 346 阅读 · 0 评论 -
bzoj4034 HAOI2015 T2 树链剖分
有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。这道题不会正解,树链剖分水过。 因为我太弱,LL和int ;%lld和%I64d没分清,调了一晚。#includ原创 2016-09-05 19:00:45 · 376 阅读 · 0 评论 -
bzoj 2502 清理雪道 上下界网络流最小流
首先可以用一种类似退流的思想,先建图跑可行流,然后删掉原图的汇点tt~源点ss之间的边,设这条边的流量为x1,再跑tt~ss的最大流x2。答案就是x1-x2。另一种做法,先不加tt~ss的边跑最大流,然后加边跑最大流x2,答案就为x2。#include<queue>#include<cstdio>#include<cstring>#include<iostream>#define maxn原创 2017-03-30 15:25:10 · 547 阅读 · 0 评论