ACM_ICPC
一个弱校菜鸡的备战ACM之旅
一只特立独行的猫
转行web3中。。。
展开
-
最大流_FF思想_EK算法
原题链接poj 1273问题图论中有一个重要问题,假设有一个水管网图,每根水管都规定了一个可以流的方向,从v号结点到u号结点最大允许通过的水量为c(v,u),有一个源点s存储了无限多的水,有一个汇点可以存储无限多的水。问:从源点流向汇点的水流的最大速率是多少?思路采用经典的EK算法,时间复杂度为O(n*m^2)n为结点数,m为边数,虽然上界很高,但是一般情况很能到上界,一般的情况要好的多。四个概念,一个定理:网络流的概念和定理非常多,为了不混淆,先只讲两个会用到的定理。1.反向边:这个概原创 2021-09-07 18:32:26 · 528 阅读 · 0 评论 -
牛客暑期多校_3 black and write
题目大意:题目给定了一个带有权值的nm的白色矩阵,将一个格子染成黑色需要花费权值。对于任意的22的方格,如果三个都被染上了色,则另一个会自动免费的染色。求最小权值。思路:通过观察可以得知,只需要染n+m-1个格子,剩下的所有格子都会被自动染色。但是前提是这些格子不能同时在22的格子里面出现。此时就将题目转换为了求最小生成树的问题。注意点:开vector存储所有的格子的权值会内存超限,用sort函数进行排序会超时。所以采用桶排序的思想进行处理。通过四个结点的x和y值来判断是否形成22的情况。#.原创 2021-08-08 19:45:17 · 117 阅读 · 0 评论 -
2019年ACM银川站H题_悬线法
原题链接.题目大意:给定两个n*m的矩阵,求他们的最大公共子矩阵,并输出这个子矩阵中的元素个数。所以输出4。思路:采用悬线法悬线法用来求直方图中最大矩形的面积。在直方图的每个柱体顶端悬挂一根线,然后将线左右移动,并分别记录该移动的最左端和最右端。左右两端的长度再乘以高度,就是当前柱体可以形成的最大面积。上图需要将两个矩阵预处理成一个矩阵,这个矩阵只存储第二个矩阵的数字在第一个矩阵中的位置。然后就可以通过判断b[i][j] - b[i-1][j]==m来确定上下是否相连。判断b[i][j]-.原创 2021-08-05 10:49:07 · 235 阅读 · 0 评论 -
二维线段树
线段树在用于一维空间中进行单点修改和区间查询非常具有优势,同样,在二维空间中线段树也可以实现该功能。可以查询区间和或者最小值。在面临多次单点修改和区间查询时,还是非常具有优势。如果需要进行区间修改和区间查询,那么就引入lazytag标记就可以实现优化。对比一下一维和二维线段树划分区间的思路:一维线段树划分区间思路:二维线段树划分区间的思路:大概就是上述思路,然后我们来看代码:#include<iostream>#define _1 node<<2 //第一象限#原创 2021-08-02 22:16:24 · 201 阅读 · 0 评论 -
线段树_lazytag
1.lazytag是个结点的标记。2.当需要使用线段树进行区间修改的时候,利用线段树存储区间信息的特点,在修改【L,R】区间时,如果区间【a,b】完全包括在【L,R】区间内,就给这个结点打上tag标记同时更新这个结点的值,tag标记的值就是区间需要修改的值。3.当需要用到线段树进行区间查询的时候,如果查询到的结点有tag标记。就将tag标记分给子节点并更新子节点的值,同时清空自己的tag标记。#include<iostream>using namespace std;const..原创 2021-08-01 13:25:35 · 610 阅读 · 0 评论 -
杭电oj训练赛第四场
第一题:题目大意就是需要给了t个函数f(x),每个函数f(x)是多个F函数的相加,判断s(x)是不是收敛的。思路:如果s(x)是收敛的,那么每一个f(j)都必须的极限都必须等于0。但是F函数的所有可选项的极限再C不为0时都不为0。所以直接判断所有C是否等于0即可。第11题:![在这里插入图片描述](https://img-blog.csdnimg.cn/9c81c7af84974aff905615e7b2d7817f.png?x-oss-process=image/watermark,type_原创 2021-07-30 17:15:50 · 120 阅读 · 1 评论 -
递归凑24点
题目:有1-13中牌,每种牌型各四张,给定一个数m,判断是否能通过从中选取四张牌通过加减乘除四种运算来凑够24点。如1,5,5,5就是5*(5-1/5)=24,如果可以,输出牌型。思路:递归生成数列,判断数列是否可以凑成24点。其中判断数列通过从原始数列中任意选取两个数,对两个数进行四种运算后返回原数组。然后继续对该数组进行上述操作,直到数组只剩下一个数,如果这个数是m,则说明找到。如果不是m,回溯。代码:#include<iostream>#include<vector&g原创 2021-07-28 19:37:09 · 298 阅读 · 0 评论 -
2021牛客暑期多校训练营1 Game of Swapping Numbers
2021牛客暑期多校训练营1 Game of Swapping Numbers题目大意:给出两个长度为n的数组,需要进行k次操作,使得两个数组的每一位的差值的和最大。思路:ma存放被减数,mi存放减数,被减数的最小值如果比减数的最大值小,就进行一次交换,带来的收益是2*(mi[max]-ma[min])。#include<iostream>#include<algorithm>using namespace std;int a[500005];int b[5000原创 2021-07-25 18:32:56 · 81 阅读 · 0 评论