[luoguP1110] [ZJOI2007]报表统计(set暴力)传送门两个multiset一个记录相邻元素的差,一个放所有的元素2个数组val[i]记录第i个的值,last[i]记录第i个最后插入的数的值然后乱搞#include <set>#include <cstdio>#include
[BZOJ1604] [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(好题)传送门
良心题解
#include <set>
#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 100001
#define LL long long
#define INF (~(1 << 31))
us
[BZOJ1576] [Usaco2009 Jan]安全路经Travel(堆优化dijk + (并查集 || 树剖))传送门
蒟蒻我原本还想着跑两边spfa,发现不行,就gg了。
首先这道题卡spfa,所以需要用堆优化的dijkstra求出最短路径
因为题目中说了,保证最短路径有且只有一条,所以可以通过dfs
[BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)传送门
把任务按照d排序
一次加入到堆中,如果当前放不进堆中,并且比堆中最小的大,
就从堆中弹出一个数,再把当前的数放进去
#include <queue>
#include <cstdio>
#include <
[POJ2443]Set Operation(bitset)传送门
题意:给出n个集合(n<=1000),每个集合中最多有10000个数,每个数的范围为1~10000,给出q次询问(q<=200000),每次给出两个数u,v判断是否有一个集合中同时含有u,v两个数
枚
[luoguP2862] [USACO06JAN]把牛Corral the Cows(二分 + 乱搞)传送门
可以二分边长
然后另开两个数组,把x从小到大排序,把y从小到大排序
枚举x,可以得到正方形的长
枚举y,看看从这个y开始,往上能够到达多少个点,可以用类似队列来搞
其实发
[luoguP2073] 送花(set)传送门
set
#include <set>
#include <cstdio>
#include <iostream>
#define LL long long
using namespace std;
struct node
inline bool operator < (const node
[luoguP3068] [USACO13JAN]派对邀请函Party Invitations(stl大乱交)传送门
记录每一个编号在那些组中,可以用vector,这里选择链式前向星。
每一组用set
将被邀请的放到queue中
#include <set>
#include <queue>
#include <cstdio>
#include
[luoguP1227] [JSOI2008]完美的对称(sort)传送门
排序!
#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 20001
int n;
struct node
a[N], b[N];
inline int read()
inline bool cmp
[luoguP1097] 统计数字(水)传送门
这么水的题,也只有提高组第一题了吧
代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 200001
int n, cnt = 1;
int a[N];
inline
[luoguP2672] 推销员(贪心 + 树状数组 + 优先队列)传送门
贪心。。。蒟蒻证明不会。。。
每一次找最大的即可,找出一次最大的,数列会分为左右两边,左边用stl优先队列维护,右边用树状数组维护。。
(线段树超时了。。。。)
代码
[luoguP1056] 排座椅(sort + 模拟)传送门
nc题,一直sort就过了
代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 2001
#define min(x, y) ((x) < (y) ? (x) : (y))
int n, m
[POJ1456]Supermarket(贪心 + 优先队列 || 并查集)传送门
1.贪心 + 优先队列
按照时间排序从前往后
很简单不多说
——代码
1 #include <queue>
2 #include <cstdio>
3 #include <iostream>
4 #include <algorithm>
[luoguP2680] 运输计划(lca + 二分 + 差分)传送门
暴力做法 50 ~ 60
枚举删边,求最大路径长度的最小值。
其中最大路径长度运用到了lca
我们发现,求lca的过程已经不能优化了,那么看看枚举删边的过程能不能优化。
先把
[luoguP2854] [USACO06DEC]牛的过山车Cow Roller Coaster(DP + sort)传送门
先按照起点 sort 一遍。
这样每一个点的只由前面的点决定。
f[i][j] 表示终点为 i,花费 j 的最优解
状态转移就是一个01背包。
——代码
1 #include <cstdio>
[luoguP2949] [USACO09OPEN]工作调度Work Scheduling(贪心 + 优先队列)传送门
这个题类似于建筑抢修。
先按照时间排序。
如果当前时间小于任务截止时间就选,
否则,看看当前任务价值是否比已选的任务的最小价值大,
如果是,就替换。
可以用优先队列
[luoguP2983] [USACO10FEB]购买巧克力Chocolate Buying(贪心)传送门
按价格排序后贪心
——代码
1 #include <cstdio>
2 #include <iostream>
3 #include <algorithm>
4
5 int n;
6 long long m, ans;
7 struct node
8 p
[BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)传送门
看到这个题有个很暴力的想法,
可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个。
当 x 到 y 有个优先级为 k 的任务时,循环 x 到
[luoguP1631] 序列合并(堆 || 优先队列)传送门
首先,把A和B两个序列分别从小到大排序,变成两个有序队列。这样,从A和B中各任取一个数相加得到N2个和,可以把这些和看成形成了n个有序表/队列:
A[1]+B[1] <= A[1]+B[2] <
[luoguP1970] 花匠(DP)传送门
n2过不了惨啊
70分做法
f[i][0] 表示第 i 个作为高的,的最优解
f[i][0] 表示第 i 个作为低的,的最优解
(且第 i 个一定选)
那么
f[i+1][1]=max(f[j][0])+1,i>=j>=1,h[j
[POJ3463] Sightseeing(次短路 Heap + Dijkstra)传送门
用dijkstra比较好,spfa可能有的重复
dis[x][2]:dis[x][0]表示起点到x的最短路、dis[x][1]表示起点到x的次短路;
tot[x][2]:tot[x][0]表示起点到x的最短路条数、tot[x
[BZOJ1179] [Apio2009]Atm(tarjan缩点 + spfa)传送门
题意
N个点M条边的有向图
每个点有点权
从某一个结点出发
问能获得的最大点权和
一个点的点权最多被计算一次
N<=500000 M<=500000
思路
先tarjan缩点,然后就形成
[luoguP2617] Dynamic Ranking(树状数组 套 主席树 + 离散化)传送门
BZOJ上是权限题,洛谷赞啊。
求区间 K 大数很简单。
但是如果修改某个数的话,那么就得把这个数及后面所建的主席树都更新一遍 nlogn,显然不行。
所以可以在外面套一个
[BZOJ1029] [JSOI2007]建筑抢修(贪心 + 优先队列)传送门
把数据存在结构体中,至于怎么贪心?
肯定会有些想法,正确错误先不必说,先来试一试。
1.按照 t2 为第一关键字从小到大排,按照 t1 为第二关键字从小到大排
这个显然错
【模板】prim的heap优化简单的代码。。
时间复杂度为O((n + m)logn)
大部分情况下还是跑不过kruskal的,慎用。
1 #include <cstdio>
2 #include <queue>
3 #include <cstring>
4 #define hea
飞行员配对方案问题(匈牙利算法+sort)洛谷传送门
匈牙利算法+sort
没什么好说的。
——代码
1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4
5 using namespace std;
6
7 int
【模板】Dijkstra的heap优化为了将最小费用最大流的spfa优化,决定将spfa换成heap优化的Dijkstra。(dijkstra不能处理负边权)
所以还得现学。。。
白点表示已经确定最短路径的点。
蓝点表示还未确定最短路
【模板】最小费用最大流洛谷模板题
没什么好说的,用spfa来找增广路。
1 #include <cstdio>
2 #include <cstring>
3 #include <queue>
4
5 using namespace std;
6
7 const int









