自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 2017南宁网络赛M.Frequent Subsets Problem (状态压缩)

题意:给你一个全集U,元素为1~n;再给你m个模板集(为U的某一子集);和一个概率a;让你求U的所有子集中,在m个模板集中出现的概率大于等于a的子集个数;例如:全集为1234,有两个模板集,分别为{1,2},{1,2,3};概率a为1,那么符合条件的子集有,{1},{2},{1,2};如果概率a为0.5,那么符合条件的除了之前的还有{3},{1,3},{2,3};思路:因为n小于等于2

2017-09-28 15:47:50 315

原创 2017南宁网络赛J.Minimum Distance in a Star Graph(bfs求最短路)

题意:给你一个n维空间,有n!的节点,节点编号为n的全排列,每个节点num与n-1个节点相连(这n-1个节点的编号分别为num的第一位与后面n-1位交换的数,例如1234与2134,3214,4231相连)思路:bfs求最短路,由于节点的数比较大,用map离散化节点就好了。最好根据题意模拟一下相连的边。代码:#include using namespace std;typ

2017-09-28 09:50:50 164

原创 2017南宁网络赛L.The Heaviest Non-decreasing Subsequence Problem (最长非递减子序列)

题意:给你一个序列。对于每个元素,如果他的值小于0,那么他的权重为0;如果他的值大于等于10000,那么他的真实值减去10000,且他的权重为5;否则他的权重为1。求一个元素值非递减的序列,使得权重值最大。思路:根据要求重新构建一个序列,小于0则不加入,大于等于0且小于10000加入1次,大于10000加入5次。然后用nlogn的方法求最长上升子序列即可。代码:#inclu

2017-09-27 21:33:21 337

原创 2017南宁网络赛F.Overlapping Rectangles(扫描线法+线段树)

题意:给你直角坐标系上的n个矩形,求其覆盖的总面积。思路:屏幕面积并问题,离散坐标后,用线段树实现扫描法。我对扫描法的一点理解:就是从高度最低开始扫描,用线段树维护当前高度向上的有面积覆盖的总长度,然后一层一层的求面积。代码:#include using namespace std;const int maxn = 1000+7;int n,cnt,num[ma

2017-09-27 20:37:38 167

原创 2017南宁网络赛B.Train Seats Reservation(初级扫描)

题意:有100个站点,给你n个乘客流入情况,每个乘客在车上时需要一个座位,求最少需要布置多少座位。思路:因为只有100个站点,所以直接模拟上车下车的情况,上车座位加k,下车座位-k,然后从头遍历一遍站点,求出最大的座位量即可。代码:#includeusing namespace std;int num[101];int main(){ int n; w

2017-09-26 15:01:01 186

原创 codeforces864D. Make a Permutation!(贪心)

题意:给你一个长度为n的序列,元素大小为1~n。让你修改某些元素值,使得整个序列出现的元素不重复(修改值范围为1~N);求在修改操作数最少的前提下,使得修改后的序列字典序最小,思路:贪心;由题意知道修改操作最少为1~n没出现过的数的个数。要使得字典序最小,那么就要从头部开始插入,平且插入可选的最小值t(可用优先队列预处理)。当某个位置的数num出现次数大于二,那么可进行插入判断。两

2017-09-26 14:23:12 600

原创 hdu1533(KM算法逆向版)

思路:把边取负,跑最大权km算法,得到的答案取负即可。代码:#include using namespace std;const int maxn = 103;const int inf = 0x3f3f3f3f;int w[maxn][maxn],lx[maxn],ly[maxn],slack[maxn],link[maxn],visx[maxn],visy[maxn],a

2017-09-26 12:13:40 334

原创 hdu2255(KM算法模板)

题意:n个人选n个房子,每个人对每个房子分别有一个出价。一个人只能买一个房子,求最大利润。思路:带权二分匹配问题,可以用最大费用流做,但是km算法更高效。代码:#include using namespace std;const int maxn = 303;const int inf = 0x3f3f3f3f;int w[maxn][maxn],lx[maxn],l

2017-09-25 21:22:05 252

原创 hdu2063(最大权匹配匈牙利算法模板)

题意:有m个女生和n个男生,k个可以建立关系。一个女生只能和一个男生建立关系,求最大的关系数。思路:二分图最大匹配,匈牙利算法枚举男生来找增广路,如果能找到,匹配数加一。代码:#include using namespace std;const int maxn = 505;vector g[maxn];int link[maxn],vis[maxn];int k,

2017-09-24 20:48:08 229

原创 hdu1533(最小费用最大流spfa模板)

题意:n个人,进n个房子,每走一格花费1元,每个房子只能进一人,求所有人进房子的最小花费。思路:建立网络图,设置大源点和大汇点。跑mcmf;代码:#include using namespace std;typedef long long ll;const int maxn = 400;const int maxm = 200000;const int inf =

2017-09-24 14:38:03 515 1

原创 hdu6214Smallest Minimum Cut(最小割的最小割边数,dinic模板)

题意:给你一个有向图,求最小割的最小割边数。思路:上网搜到两种方法,其中一种是错的,因为最小割的割边一定为满流,但满流的边不一定是最小割的割边。还有,用ford-fulkerson算法会超时,,所以套了个dicnic的模板代码:#include #include #include #include using namespace std; const int Ni

2017-09-23 11:43:28 256

原创 hdu3549(最大流ford-fulkerson模板)

题意:给你一个有向图,源点为1,汇点为n,求最大流。思路:ford-fulkerson模板代码:#include using namespace std;const int maxn = 20;const int inf = 0x3f3f3f3f;class edge{public: int to,cap,rev; edge(int t,int

2017-09-22 20:16:22 229

原创 2017乌鲁木齐网络赛F.Islands(强连通分量模板题)

题意:给你一个有向图,让你添加最少的边,使得这个图任意两个点互相可达。思路:求强连通分量,缩点,求出缩点后的图的出度为0的点的个数c1,入度为0的点的个数c2.根据题意,只要添加线,使得不存在出度为0和入度0的点即可所以最少需要max(c1,c2);注意特判强连通分量为1的情况。代码:#include using namespace std;const int max

2017-09-22 10:47:26 246

原创 2017.09.17有感

当断不断,必受其乱。时不我待,只争朝夕。

2017-09-17 11:47:43 177

原创 dijkstra模板

用dijkstra算法时,求最短路,不能存在负权边;求最长路时,不能存在正权边(((贪心思想;代码:struct edge{ int to,val,next;}e[maxm];int vis[maxn],head[maxn],in[maxn];ll dis[maxn];int n,m,cnt;void add(int u,int v,int val){

2017-09-13 17:21:06 188

原创 hdu6201transaction transaction transaction(最长路spfa vector模板)

思路:把点权化成边权,跑最短路,这题卡常数了,必须用vector版的邻接表跑spfa才能过。代码:#include using namespace std;typedef long long ll;const int maxm = 1e5+7;const int maxn = 1e5+7;const ll inf = 0x3f3f3f3f3f3f3f3f;struct E

2017-09-13 14:57:27 215

原创 2017乌鲁木齐网络赛 skiing(spfa/bellman最长路模板题)

题意:给你一个有向图,让你求整个图可以跑出的最长路。思路:对每个入度为0的点跑一遍最短路,每次跑都记忆化。最后遍历一遍最大值。代码:#include using namespace std;typedef long long ll;const int maxm = 1e5+7;const int maxn = 1e4+7;struct edge{ int

2017-09-12 21:28:03 230

原创 hdu6198 number number number(矩阵快速幂模板题)

题意:给你一个斐波那契数列,和一个k,能被k个斐波那契数(可重复)正好相加的数为good,否则为bad。在给定的k的前提下,让你求最小的bad数。思路:在稿纸上写个斐波那契数列,并推出前几个k的答案,发现所求值为第k*2+3项斐波那契数减1。然后用矩阵快速幂求斐波那契数即可。(((自己手写的矩阵快速幂渣爆了,copy了大腿的模板。。代码:#includeusing names

2017-09-12 17:51:25 185

原创 hdu6197array array array(最长上升子序列二分版)

题意:给你一个长度为n的数组;问你能不能在删除k个元素后,使得数组变为一个非增序列或者非减序列。思路:1.记录dp[i]为以第i个元素为结尾的最长非增(减)子序列。时间复杂度O(n*n);这题数据范围T了;代码:#include using namespace std;const int maxn = 1e5+7;int dp1[maxn],dp2[maxn],arr

2017-09-11 20:56:08 207

原创 hdu6092Rikka with Subset(dp+思维)

题意:让你求一个长度为n的数组,这个数组的每个子集的和为a,a的范围为0~m,,现在给你0~m中每个数出现的次数。求出这个长度为n的数组。思路:先求出数组中有几个0,发现0的个数为log(0出现的次数),那么1的个数就为 1出现的次数/0出现的次数 然后根据1的个数,来更新能凑出和为1~m的个数,记dp[i]为已知的数能凑出多少个和为i的数,每得到一个数,就更新一次dp数组,因为为

2017-09-06 20:03:58 156

原创 hdu6162 Ch’s gift(LCA)

题意:给你一棵树,每个节点有一个价值,要执行m次询问,每次询问输入四个数,s,t,a,b,求解s到t的最短路,并把路径上节点的价值在[a,b]之间的价值求和输出。思路:对每组询问,求LCA(开始询问前先以1为根节点dfs一遍,确定每个节点的高度,开始每组询问时,根据高度差迭代求lca,详情看代码),并在求解过程判断价值符不符合要求。代码:#include using nam

2017-09-05 20:23:58 289

原创 codeforces851C. Five Dimensional Points(暴力/思维)

题意:给你几个五维空间上的点,问你有几个好点,好点定义:任意其他两个点与该点的夹角不为锐角。思路:1.只要判断为坏点后马上break,暴力能过。。(我天,,我当时没敢写,看来以后遇事不决先暴力优化一发试试)2.只要n>11这个空间上必定没有好点,因为五维空间理论上只有5条互相垂直的直线,若一个点为好点,该空间最多只有11个点(五条垂线的交点为好点,其他的点分别在每条垂线上,即5

2017-09-05 16:48:31 584

原创 codeforces 842C. Ilya And The Tree(dfs)

题意:有n个节点标号1~n,每个节点有一个正整数价值,这几个节点形成了一棵以节点1为根节点的树,求根节点到节点x的路径上所有节点价值的gcd(你可改变这条路径上某个节点的的价值为0,或者不做任何修改);思路:从根节点开始,求每个节点可能的gcd,用set维护这些gcd。则每个节点的可能的gcd必包括 其父节点的gcd与当前节点的价值的最大公因数。但漏了一种情况,不修改从根节点到当前节点

2017-09-03 16:25:34 253

原创 codeforces 848A From Y to Y(思维)

题意:给你一个整数K,求出一个字符集,这个字符集经过最优的合并后,合并的花费恰好等于K。思路:样例给的答案让我以为这题很复杂,,但发现一个长度为n的只有一种字符的字符集,最优合并后的花费为n*(n-1)/2,,所以只要找出不同的字符集的(不同的字符集,合并时不需要花费),使得他们的和为k就行了。代码:#include using namespace std;int ma

2017-09-02 20:44:05 285

原创 codeforces 849B Tell Your World(计算几何)

题意:给你一个直角坐标系,上面有n个点,问你能不能画两条不重合的平行线,使得每条平行线至少经过一个点,且所有的点都在其中一条平行线上。思路:提取前三个点,根据题目要求,这两条线其中一条必经过前三个点中至少两个点。所以可以枚举第一条平行线,找有没有符合条件的另一条平行线。代码:#include using namespace std;typedef long long ll

2017-09-02 19:33:50 351

原创 BZOJ4690 Never Wait for Weights(带权并查集模板题)

题意:一共有n个物品;输入:? a b w 表示b比a重w,! a b 表示输出b比a重多少;思路:对每个? a b w;建立a、b的并查集,维护dis数组。dis[x]表示x比x的父亲fa[x]重多少;代码:#include using namespace std;int fa[100100];long long dis[100100];int n,m;int

2017-09-01 20:42:12 198

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除