===图论===
Loi_a
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
noip2012 图论+贪心+二分
首先,这道题是有二分性质的,就是说时间放的越长,能切断的点就越多。然后就是贪心验证。 刚开始这样想的——对于每一次验证,按军队深度(与根之间的距离)从排序后, 1.一个点在给定时间内跑不到第二层,就尽量往上跑。 2.如果跑到第二层,就填上这一层。 3.如果跑到第二层,发现这点填过了,就跑到根,记录一下剩余时间。 这样之后bfs,没有填过的第2层由跑到根的点补一下。 调了一天,发现思路错了原创 2020-03-26 21:48:38 · 701 阅读 · 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 · 609 阅读 · 0 评论 -
bzoj 2055 80人环游地球 上下界费用流
这题像上下界网络流一样,把一条边拆成三条,其中原图中的边权值不变,连向超级源点和汇点的边权值改为0就可以。然后把边合并一下。答案为每条边最小容量*权值+建完图后最小费用流。#include<queue> #include<cstdio> #include<cstring> #include<iostream> #define maxn 405 #define LL long long using n原创 2017-03-30 14:20:28 · 551 阅读 · 0 评论 -
bzoj2654 tree 最小生成树+二分验证
给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。 因为随着白色边权值同时增大或同时减小,最小生成树中白色数量也会增大或减小,所以可以二分一个值Mid,白色边同时加上Mid,求生成树中白边数量。然后调整上下界。#include<iostream> #include<cstdio> #include<algorithm> #define maxn 50005原创 2016-12-20 21:25:27 · 794 阅读 · 0 评论 -
bzoj1468 tree 点分治
给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K 计算经过根的路径,既离根的距离之和小于K的点,然后递归处理不经过根的路径。这样会有一些重复,两点与根的距离之和小于K,但是路径不经过根,需要减掉。#include<iostream> #include<cstdio> #include<algorithm> #define maxn 80005 using namespa原创 2016-12-20 19:16:06 · 578 阅读 · 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 · 585 阅读 · 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 · 611 阅读 · 0 评论 -
noip2003 加分二叉树 dp
中序遍历中,一个节点子树是该点向左右扩展连续的一段。dp[x][l][r]是记录以x为根,l,r为左右端点的子树所产生的最大价值。记忆化搜索做。#include<bits/stdc++.h> #define LL long long using 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 · 685 阅读 · 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 · 849 阅读 · 0 评论 -
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 · 587 阅读 · 0 评论 -
NOIP2015 D2T3运输计划
常数是检验人傻的唯一标准…… 但是今天我要推翻这句话。 我这么机智,怎么还有巨大常数……#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define Max(x,y) x>y?x:y; #define maxn 300005 using namespace std; void read(int原创 2016-10-20 09:54:44 · 1039 阅读 · 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 · 386 阅读 · 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 · 465 阅读 · 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 · 651 阅读 · 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 · 482 阅读 · 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 · 507 阅读 · 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 · 374 阅读 · 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 · 420 阅读 · 0 评论
分享