- 博客(11)
- 收藏
- 关注
原创 Bzoj 4184 shallot
如果只有插入的话,直接维护线性基就好了但是现在有了删除,我们按时间分治,将操作建立成一个线段树。每一个数都有一个存活的区间,我们在线段树上更新这个区间。然后dfs线段树。线段树上每个节点维护的是到当这个节点的线性基。然后就可以免去删除操作了具体见代码#include<vector>#include<map>#include<stack>#include<cstdio>#include<cst
2016-11-24 10:35:13 490
原创 CodeForces 663E - Binary Table
给出一个n(n≤20)n(n \le 20)行m(m≤105)m(m\le 10^5)列的0101矩阵。每次操作可以将某一行取反或者将某一列取反。要求操作后的矩阵中的11的个数最少,求最小个数。因为行比较少,我们考虑状压。状压每一列的状态,stasta第ii位为11表示第ii行为11,为00表示第ii行为11用一个函数F(sta)F(sta)表示状态为stasta的列的数量考虑状压我们操作了哪些行,
2016-11-18 20:20:22 1407 1
原创 CodeForces Round 718D - Andrew and Chemistry
给出一个每个节点的度小于4的树,问有多少种增加叶子的方式(保持每个节点的度小于4)。增加之后的树同构的算一种第二个树哈希#include<bits/stdc++.h>using namespace std;#define LL long long const int maxn = 112345;vector<int> edge[maxn];int dep[maxn],fa[maxn];void
2016-11-16 11:33:43 532
原创 Bzoj 3875 骑士游戏
DP的本质是DAG上的最短路。但是如果不是DAG呢?那些常用的最短路算法,比如spfa或者是Dijkstra就可以了。感觉打开了新世界的大门。对于这个题来说,我们需要维护一个查分。具体的处理过程见代码#include<bits/stdc++.h>using namespace std;const int maxn = 212345;#define LL long long LL mag[maxn
2016-11-16 11:21:05 409
原创 Hdu 5732 Subway
给你两个同构的树,找出他们节点间的对应方式树哈希本质上就是一个树dp。考虑以树的唯一的一个节点(比如重心,直径中点)作为树根,然后用一个和子树顺序无关的方式去哈希就好了。具体见代码#include<bits/stdc++.h>using namespace std;const int maxn = 112345;#define LL long long #define Deagconst i
2016-11-14 22:12:19 331
原创 Hdu 4804 Campus Design
有一个n×m(n≤100,m≤10)n\times m(n\le 100,m\le10)的棋盘,除了一些不能被覆盖的位置外其他的地方用1×21\times2和1×11\times1的骨牌填满,1×11\times1的骨牌使用次数在[C,D][C,D]之间。问满足条件的方案数(mod109+7)\pmod {10^9+7}一个简单的插头dp入门题。不能覆盖的地方可以视作必须放下1×11\times 1
2016-11-04 16:19:36 306
原创 Codeforces 350E - Wrong Floyd
简单的构造,通过AA数组的元素个数我们可以确定可以构造出来的图的边的上界。然后判断即可。#include<bits/stdc++.h>using namespace std;const int maxn = 3123;bool vis[maxn];int getnod(int n){ for(int i = 1;i<=n;i++) if(vis[i] == false) return i;
2016-11-02 12:20:37 553
原创 Codeforces 350D - Looking for Owls
给出一些圆和线段。定义一个“猫头鹰”是满足以下四个条件的一个线段和两个圆的集合。两个圆半径相等两个圆没有交点两个圆关于线段对称两个圆圆心的连线和线段有交点圆的个数≤1500\le 1500,线段个数≤3×105\le 3 \times 10^5因为圆比较少,考虑枚举圆对统计符合条件的线段个数。首先将线段按照是否在同一条直线上分类。可以考虑用斜率和截距作为特征放在map<int,pair<i
2016-11-02 12:15:20 443
原创 Codeforces 350C - Bombs
将炸弹按照离原点点的曼哈顿距离排序之后顺序处理即可。#include<bits/stdc++.h>using namespace std;const int maxn = 112345;vector<pair<int,pair<char,int> > > ans;pair<int,pair<char,int> > npair(int st,char c = 'E',int tim = 0){
2016-11-02 12:10:54 430
原创 Codeforces 349E - Subset Sums
有n(n≤105)n(n\le 10^5)个数,有mm个下标的集合(集合的大小之和小于10510^5)维护两个操作询问操作:? k?\ k 将下标在第k个集合内数求和输出更新操作:+ k x+\ k\ x 将下标在第k个集合内的数都+x+x因为集合的大小之和小于10510 ^ 5,不妨记集合的大小之和为S考虑将集合分类。将大小超过 S−−√\sqrt S的集合称之为大集合,大小小于S−−√
2016-11-02 12:01:59 406
原创 Codeforces 349D - Apple Tree
有一个有根树,每个叶子节点都有一定量的苹果(可能为0),非叶子节点上没有苹果。一个节点的重量定义为在以这个节点为根的子树内的节点的苹果个数和。对于一个节点称它是平衡的当且仅当这个节点的每个子节点的重量都相等。问最小需要拿走多少个苹果才能令所有节点都平衡。假设我们已经将一个子树拿成了平衡的,这个子树的父节点需要这个子树继续拿走苹果的时候,苹果是一份一份拿的,一份中含有的苹果的个数依赖于这个子树的形态。
2016-11-02 11:32:06 562
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人