自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cutele

我宁愿错了也不想当弱者

  • 博客(156)
  • 收藏
  • 关注

原创 【数论】【模板】

打算存点数论板子,五一更1.GCD与LCM辗转相除法:gcd(a,b)=gcd(b,a%b);更相减损术:gcd(a,b)=gcd(a,b-a);记录一下昨晚的题:传送门添加链接描述

2020-04-29 08:45:06 155 2

原创 总结-易错细节

1.^和==的优先级是前者小于后者,其他优先级可参考《c/c++优先级列表》https://blog.csdn.net/xyw_Eliot/article/details/9767369?utm_source=app未完待续……

2020-04-02 00:57:00 63

原创 图论【模板】
原力计划

先问个问题,什么是图?好吧,根据离散数学高大上的概念,以及博主本人浅薄的了解,图就是把一堆点和边(和权值)扔到一起所构成的东东。图分为有向图和无向图,可以把无向图看做特殊的有向图。那么有了图,我们就要存储图,图的存储方式有哪几种呢。邻接矩阵,邻接表等等。根据各路神仙的BLOG,邻接表挺实用的。邻接矩阵的优点是可以快速添加边和删除边,但其大小只是由点的个数决定,如果某图中点多边少,就会造成空间的...

2020-03-01 13:44:11 708

原创 【数据结构】【模板】

太好玩了 我爱这个!单链表题目描述实现一个单链表,链表初始为空,支持三种操作:(1) 向链表头插入一个数;(2) 删除第k个插入的数后面的数;(3) 在第k个插入的数后插入一个数现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数...

2020-02-02 21:43:00 375

原创 codeforces1426——F. Number of Subsequences(DP)

原题链接题意:给定一个含有abc?的字符串,?可能是abc中的任意一个,求所有可能的无?字符串中,子序列abc出现的次数.思路:dp[i][j]表示前i个字母里j子序列的个数,其中j== 1表示子序列a,j== 2表示子序列ab,j== 3表示子序列abc。最后答案就是dp[n][3]。再来看每一步的转移:1.第i位是a,dp[i][1]=dp[i-1][1]+tmp;假设前i位里?的个数为k,那么这个?有a,b,c三种可能,就会将原先的串变为3^k种串,每个串里在第i位上都是a,所以要算3

2020-11-25 21:56:09 7 1

原创 codeforces1324——E.Sleeping Schedule(DP+初始化)

原题链接题意:(from洛谷)思路:很容易想到DP。dp[i][j]表示选完前i个元素前缀和对h取余的值为j的优秀睡眠的个数。划分依据就是选择第i个元素时是否将其减一,如果不减一的话,上一个状态就是dp[i-1][j-a[i]],即选完前i-1个元素后前缀和对h取余的值为j-a[i]的优秀睡眠的个数;减一的话也类似。有两个需要注意的点:一是初始化,因为有些状态不合法,要初始化为极小值。二是关于取余的问题,应该要保证dp数组的第二维为正数。代码:#pragma GCC optimize(

2020-11-23 19:43:26

原创 codeforces319——B. Psychos in a Line(思维+单调栈)

原题链接题意:思路:力推聚聚博客确实很思维。记录每个人第几次被打死的,那么n个人的最大值就是答案。一个人y如果想被打死,他左边要有一个比他大的数,记作x,那么从x到y的过程,y的次数就是x到y的最大值+1。因为不能只能打死相邻的人,所以要等到x到y之间的人都被打死之后y才能被打死,也就是x到y之间的人的最大次数+1。用单调栈维护,要注意栈为空的情况。代码:int a[maxn],n;struct node{ int val,step;};stack<node>s

2020-11-22 16:07:55 17

原创 codeforces292——D. Connected Components(并查集+前缀和优化)

原题链接题意:思路:很巧妙的一个题。如果不断开的话就是简单的并查集计算连通块的问题。先来考虑一下暴力的做法,去掉[l,r]之间的边后,直接暴力将[1,l-1]和[r+1,m]的边连接起来,计算出连通块的个数,大概就是这样:while(k--){ int l,r; scanf("%d%d",&l,&r); for(int i=1;i<=n;i++) root[i]=i; int res=n; f

2020-11-22 13:48:07 7

原创 codeforces1013——D. Chemical table(思维+转化+并查集)

原题链接题意:(from洛谷)给你一个n*m的矩形,一开始有q个格子上被标记。对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第4个会被自动标记。问你至少需要手动标记几个格子,使得整个矩形内的格子都被标记。思路:假设交汇的四个格子的坐标是(x1,y1),(x1,y2),(x2,y1),(x2,y2).那么这四个点里有任意三个点被标记后,第四个也能够被标记,也就是说第四个点是(x1,y1),那么它能够被标记的条件就是x1和y1在一个连通块里.也就是说,在一个连通块里的坐标构成的任意点都能够

2020-11-22 10:44:23 10

原创 codeforces722——C.Destroying Array(并查集+栈+逆向思维)

原题链接题意:思路:正着删除不好维护,我们考虑倒着加数。加入的时候合并左边元素和右边元素在的连续序列,更新答案。因为要倒序输出,可以用栈来维护。合并可以用并查集。注意刚开始的时候要加入0,即删完所有元素后答案一定是0.代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<ll,ll>PLL;

2020-11-22 08:15:29 8

原创 codeforces731——C. Socks(并查集)

原题链接题意:有n只袜子,k种颜色,在m天中,问最少修改几只袜子的颜色,可以使每天穿的袜子左右两只都同颜色。思路:将在一天里穿的放到一个连通块里,染成当前连通块最多的一种颜色。并查集或dfs维护。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<ll,ll>PLL;typedef pair&l

2020-11-22 08:08:14 8

原创 codeforces118——D. Caesar‘s Legions(DP)

原题链接题意:1<=k1,k2<=10,1<=n1,n2<=100思路:开了个四维的DP,反正空间也足够(手动狗头.jpg)dp[i][j][u][v]表示选了i个A,j个B,而且末尾有u个连续的A或v个连续的B的方案数。因为结尾只能放一种字符,所以u和v中肯定有一个是0。(从这点可以简化成三维的DP)当u==0时,表示末尾有v个连续的B,考虑下一个放什么,如果下一个放A,那么该状态就能转移到dp[i+1][j][1][0];如果下一个放B,那么该状态就能转移到dp[

2020-11-21 21:47:02 12

原创 UPC—— 最勇敢的机器人(并查集+分组背包)

问题 K: 最勇敢的机器人时间限制: 1 Sec 内存限制: 128 MB题目描述机器人们都想知道谁是最勇敢的,于是它们比赛搬运一些物品。它们到了一个仓库,里面有n个物品,每个物品都有一个价值Pi和重量Wi,但是有些物品放在一起会爆炸,并且爆炸具有传递性。(a和b会爆炸、b和c会爆炸则a和c会爆炸)机器人们可不想因此损失自己好不容易从Wind那里敲诈来的装备,于是它们想知道在能力范围内,它们最多可以拿多少价值的物品。你能帮助它们吗?输入每组测试数据第1行为n,Wmax,k(0<=n,

2020-11-21 21:37:11 7

原创 codeforces446—— A.DZY Loves Sequences(DP+枚举)

原题链接题意:思路:n只有1e5,枚举每一个点作为分界点,维护每个点的递增子序列和递减子序列,如果这两个序列能够接起来,答案就是两个序列和的长度,否则,就是两个序列的最大值。代码:const int maxn=1e5+100;int a[maxn],l[maxn],r[maxn],n;int main(){ n=read(); for(int i=1;i<=n;i++) a[i]=read(); a[0]=0; for(int i=1;i<=n;i

2020-11-21 16:23:02 5

原创 codeForces416——B.Art Union(模拟)

原题链接题意:思路:就是个模拟。dp[i][j]表示第i副画第j个画家完成的时间,答案就是dp[i][n];第i副画第j个画家有两个条件必须都满足,一是第j个画家画完了第i-1副画,二是第i副画被j-1个画家画完了,两者同时满足要取max。代码:ll t[maxn][10],m,n;ll dp[maxn][10];///第i副画第j个画家完成的时间int main(){ m=read(),n=read(); for(int i=1;i<=m;i++)

2020-11-21 15:57:39 3

原创 codeforces455——A. Boredom(线性DP)

原题链接题意:思路:记录每个数的出现次数为a[i]。考虑dp。dp[i][j]表示选到i并且i的状态为j的最大价值。当j==0时,表示不选i,此时i-1选不选都可以。当j ==1时,表示选i,这时候i-1必须不选,选i的贡献是i*a[i]。遍历到1e5就好了。也可以将第二维去掉。代码:#pragma GCC optimize(3)#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")#p

2020-11-21 15:01:56 4

原创 codeforces327——A. Flipping Game(前缀和)

原题链接题意:给定一个01序列,可以翻转一次区间,求最多得到的1的个数。思路:大意了啊没有闪上来莽了一波错误思路,翻转最长的0的子串。hack样例/**70 0 0 1 0 0 0**/正解:考虑每次翻转对答案的贡献,翻转就是0变为1,1变为0,所以变化的1的个数就是该段区间0的数量-1的数量,取max就好了。代码:#pragma GCC optimize(3)#pragma GCC optimize("Ofast","unroll-loops","omit-frame-po

2020-11-21 14:42:51 4 1

原创 codeforces1210——A.Anadi and Domino(思维+枚举)

原题链接思路:我们可以给每个点都标号,然后和每个点相连的边上放的骨牌的标号和点的标号相同。这样可以看出当n<=6时,每个边都可以放骨牌,并且不会冲突。当n==7时,就意味着有两个点的标号一样,这样就会有一些边上没有骨牌,只需要记录一下就好了。有·思维。代码:#pragma GCC optimize(3)#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")#pragma GCC optimize

2020-11-21 13:51:14 5

原创 codeforces1209——D.Cow and Snacks(并查集)

原题链接题意:n种食物,一种食物只有一个,m个人,每个人有两种喜欢吃的食物。每个人来的时候会把喜欢吃的未被吃过的食物都吃掉,如果吃不到食物的话就会难过,适当安排序列,使得难过的人最少,并输出该数量。思路:读错题了,以为是匹配。本题中人可能不止吃一个食物。考虑把食物看成节点,第一个来的人肯定是吃两个食物,这就构成了一条边。以后每来一个人,如果两个喜欢的食物在一个连通块里的话,说明都被以前的人吃了,他就会不开心;否则,就一定会有食物吃。用并查集维护就好了。代码:#pragma GCC optim

2020-11-21 13:08:55 5

原创 codeforces1244——D.Paint the Tree(dfs)

原题链接题意:给定一棵树,每个节点都可以涂三种颜色,分别有不同的代价。现在要求你对一棵树进行涂色,要求任意相邻的三个点的颜色都不同,求最小代价和任意一种涂色方案,没有方案输出-1思路:首先,如果一个节点的度数大于3那就必然不能成功涂色。假设A的出度点是B,C,D.那么无论怎么组合,都无法使得任意三个点的颜色相同。所以这棵树只有由度数为1和2的点构成的时候才可以被涂色,这时候就相当于一条链。从链的一端开始涂色,当前两个点的颜色确定时,第三个点的颜色也会确定,相继会确定所有点的颜色。我们只需要枚举

2020-11-21 12:25:41 4

原创 UPC——Heartlessly 的魔法石(排序)

问题 G: Heartlessly 的魔法石时间限制: 1 Sec 内存限制: 128 MB题目描述Heartlessly 有 n 个魔法石,每个魔法石都有对应的魔法值(用正整数 a i 表示)。Heartlessly把它们按魔法值从小到大排成一行,并分成 k 组,每组魔法石产生的能量为组中最大的魔法值减去最小的魔法值。你能求出这些魔法石产生的最小能量和最大能量分别是多少吗?输入第一行,输入两个正整数n,k,分别表示魔法石数量和分组数量。第二行,输入正整数a1∼an,表示每个魔法石对应的魔法值

2020-11-21 10:44:02 24

原创 HDU6656——Kejin Player(期望DP+前缀和)

原题链接题意:思路:因为只能一级级的升级,所以要升级到r级一定会先升级到l级。dp[i]表示从1升到i级的花费,那么对于每次询问dp[r]-dp[l]就是答案(相当于维护一个前缀和)状态转移:因为每次从i级升到i+1级的成功率是不一定的,所以升级次数也是不一定的。假设第x次时升级到i+1级成功,所以前x-1次都是失败的。dp[i+1]=dp[i]+a[i]+(t-1)*(a[i]+dp[i]-dp[x[i]]);a[i]表示第x次升级的花费,后面的表示前x-1次的花费,dp[i]-dp[x

2020-11-19 21:21:13 12

原创 codeforces1068——D.Array Without Local Maximums(计数DP+前缀和优化)

原题链接题意:给定一个序列,a[i]==-1表示该位无元素。现在要你填充这个序列使得a[i]<=max(a[i+1],a[i-1]),a[0]=a[n+1]=0(最后一句可以这样理解)1<=a[i]<=200.求方案数思路:计数DP,推了好久,还没想到前缀和优化。首先是状态表示,因为a[i]的范围只有200,我们不妨来枚举填1~200的每一种情况:dp[i][j][k]表示第i个数填j时并且和第i-1个数的关系为k的方案数,当然这肯定是只有需要填数时才可以转移。接下来是状态

2020-11-19 19:21:19 9

原创 codeforces1253——D. Harmonious Graph(并查集)

原题链接题意:定义一张无向图是和谐的当且仅当:假设图中存在一条从 l 到 rr(l<r)的路径,则图中也存在从 l 到 l+1,l+2,……,r−1 的路径。给出一张无向图,求至少需要添加多少条边才能将其变为和谐的。思路:可以发现对于每个连通块来说,如果最大值和最小值之间有数不属于该连通块,就是连边。用并查集维护每个连通块并保证每个连通块的根节点都是最大值。再遍历一遍节点,对于每个节点暴力的计算出每个节点和根节点之间的点是否在该连通块内,不是的话就加边,加边的时候也要保证根节点是最大值。

2020-11-19 08:51:35 14

原创 LDUOJ——I. 买汽水(折半搜索+双指针)

I. 买汽水Descriptionczyz暑期集训一共N天。由于jmy和lkf玩游戏总是输,作为惩罚,他需要给oiers买汽水。jmy最多只能给大家花M元钱。由于每天汽水的价格都不固定,现在给出每天买汽水的花销,我们可以随意选择让jmy哪些天买汽水(当然总花费不能超过M)。请问最多一共能够花掉jmy多少钱呢?暑假最多不超过40天,jmy给大家花的钱最多有一亿。Input输入第一行有两个整数N,M。 1≤N≤40,0≤M≤100000000。接下来一行有N个数,第i个数表示第i天的汽水花销。每天

2020-11-17 21:42:10 17

原创 洛谷P3360 ——偷天换日(dfs读入+树形DP+01背包)

原题链接访问美术馆的加强版思路:和上一题相比,该题只是给展室中的画定义了价值和耗费时间,对于每个展室中的话跑01背包。dp[i][j]表示到第i条走廊时,花费j时间能够得到的画的最大价值。在读入数据的时候进行dp即可。代码:///#pragma GCC optimize(3)///#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")///#pragma GCC optimize(2)#incl

2020-11-17 20:36:26 17

原创 洛谷P1270 ——“访问”美术馆(dfs读入+树形DP)

原题链接思路:很显然给出的点可以构成一棵树,设dp[i][j]表示走到i个走廊剩余j时间还能够拿的画的最大数量。当i为叶子节点(展室)时,直接求数量即可;当i为非叶子节点时,枚举分给左子树的时间k,那么dp[i][j]=max(dp[i<<1][k]+dp[i<<1|1][time]);要注意要减去穿过走廊所用的时间,因为是来回,所以要* 2 ,可以在读入的时候就*2;要记得读入的时候按照dfs的顺序读入。还有就是根据题意“警察赶来之前”,也就是说第s秒是不算的,要s

2020-11-17 19:57:16 11

原创 洛谷P4799—— [CEOI2015 Day2]世界冰球锦标赛(折半搜索)

原题链接题意:给n个物品和对应的价格,问用不超m元的钱可以买到的物品的方案数。思路:折半搜索的入门题(雾.jpg)n的范围是n<=40。普通的搜索一定会TLE,考虑将物品分成两部分来搜索,这样时间复杂度就变成了2^(????/2+1);基本思路就是对[1,mid] 和[mid+1],n两个区间都进行dfs,分别记录答案,再将两个答案区间合并。就本题而言,a数组表示对[1,mid]进行搜索,得到的方案;b数组表示对[mid+1,n]进行搜索,得到的方案。区间合并时,对于a,b数组里的任意

2020-11-17 13:39:52 41

原创 LDUOJ——最小生成树(欧拉函数+思维)

原题链接H. 最小生成树Description话说正在jmy愁苦如何筹钱给大家买汽水的时候,他遇上了一位魔法师。魔法师希望jmy能帮他破解魔法书的咒语。如果jmy做到了,就帮他付所有买汽水的钱。魔法书上画了一个完全图(每两个点之间有且只有一条边),每个点都有一个独一无二的[1,n][1,n]内的编号,jmy的任务是要找到最小生成树,以此作为魔法树,从而破解咒语。对于完全图的边(i,j)(i≠j)(i,j)(i≠j)的边权恰好就等于i,ji,j 两个数字的最大公约数。特别地,要作为魔法树,必须满

2020-11-16 23:31:37 29

原创 LDUOJ—— J. 大乌龟冲呀!(线性DP)

原题链接J. 大乌龟冲呀!Description在杂志社工作的小鹏在休息日突然接到老板丢过来的文本编辑任务,要求将一串漏洞百出的文本AAA 编辑为小鹏认为合理的文本$B$,小鹏一次可以对一个字符进行插入、删除和替换操作,每种操作需要耗费的时间分别对应为xxx,yyy,$z 分钟,然而小鹏一心只想看分钟,然而小鹏一心只想看分钟,然而小鹏一心只想看T$ 分钟后的英雄联盟S10 全球总决赛,亲眼见证最喜欢的大乌龟战队夺冠。问:小明是否可以准时观看比赛?若可以,请告诉小明完成工作后还有多久开始比赛,否则输出

2020-11-16 23:08:24 168

原创 牛客——求和(dfs序+树状数组)

原题链接题意:给定一棵树,有点权;两种操作,一是修改某个单点的权值,二是查询某个点为根节点的子树的点权之和。思路:dfs序后,子树都处于一个区间里,所以问题就转化成了单点修改、区间求和。用树状数组维护即可。代码:#include<bits/stdc++.h>typedef long long ll;using namespace std;const int maxn=1e6+7;int n,m,k;int h[maxn],idx;struct node{ int

2020-11-15 09:35:21 8

原创 牛客——选点(dfs序+LIS)

牛客——选点(dfs序+LIS)原题链接思路:根据题意,选出来的子树应该满足:左子树的点的权值>右子树的点的权值>根节点的权值。对树按照根右左的顺序求dfs序,在转化后的序列里求最长上升子序列即可。代码:///#pragma GCC optimize(3)///#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")///#pragma GCC optimize(2)#include&l

2020-11-14 21:33:08 8

原创 HDU2376——Average distance(思维+树形DP)

原题链接题意:给定一棵树,有边权,求树上任意两点之间距离的和的平均值。思路:传统求树上两点距离是LCA,任意的话要枚举起点和终点,复杂度O(n*n)。换个思路,考虑每条边的贡献:因为是树,所以任意删除一条边都会将该图分为两个连通块T1,T2,也就是说这条边对答案的贡献就是两个连通块点数的乘积再乘以权值,次数=cnt[T1]*cnt[T2].维护每个点的子树所含的点的个数num,n-num就是另一个连通块的点数,树形dp维护即可。代码:注意用long long#pragma GCC opti

2020-11-13 21:42:05 21

原创 LDUOJ——没有上司的晚会(树形DP)

原题链接题意:给一棵树,每个点都有权值a[i],要求从中选若干个点,满足该点和其父亲节点不能同时被选择,求最大权值。思路:一般树形DP的第一维都是子树的编号,我们用dp[i]表示选完以i为根节点的子树能够获得的最大权值。一个点是否被选择,和他的父节点是否被选择有关,在此基础上再加一维度表示该点是否被选择,即dp[i] [0]表示不选择节点i且选完以i为根节点的子树能够获得的最大权值,dp[i] [1]表示选择节点i且选完以i为根节点的子树能够获得的最大权值。再来考虑状态转移,因为子节点和父节点不

2020-11-10 21:35:40 11

原创 蓝桥杯——修改数组(思维+并查集)

原题链接思路:1.暴力枚举,用map标记前面是否出现过一个数,大约过60%左右的数据。2.单链表并查集。相当于是一个链式结构。i的根节点表示从i开始向右找,第一个没有被用过的数。最开始每个数都指向自己,一旦出现有个数被用过的话,就让root[x]=x+1。图示在参考博客的聚聚那。代码:#include<bits/stdc++.h>using namespace std;const int maxn=1e6+7;int a[maxn],root[maxn];int Fin

2020-11-07 19:46:45 15

原创 codeforces1437——C. Chef Monocarp(线性DP)

原题链接题意:将n个菜放入烤箱,每个菜的最佳取出时间为t[i],每个时刻只能够取出一道菜。在时刻T取出第i个菜的不愉快值为abs(t[i]-T)。求最小的不愉快值。思路:首先,将t按照从小到大排序,因为取出时间早的越早拿是最优的。(好像并不准确.jpg);考虑动态规划,dp[i] [j] 表示到时刻i取出了j个菜的最小不愉快值。划分依据为是否在时刻i取出第j个菜:如果取出第j个菜的话,那么上一个状态就是到时刻i-1取出了j-1个菜,本次对答案的贡献是abs(i-t[j]);如果不取出第j个菜的

2020-11-06 23:43:52 19

原创 【算法竞赛进阶指南】金字塔(区间DP+dfs序)

原题链接题意:给定序列表示dfs一棵树遍历得到的顺序,每次经过一个节点都输出该节点对应的字母,求有多少棵树满足此序列。思路:首先根据dfs的过程可以得到如果一棵树有n个节点的话,他的序列长度为2n-1;所以如果给出的长度为m的话,节点数量n=(m+1)/2。所以如果说给出的序列长度是偶数的话,答案一定为0;即每个子树的dfs序列长度必定为奇数。因为一段dfs序列可以对应一棵子树,考虑动态规划。dp[l] [r] 表示所有dfs序列是s[l~r]的树的个数,划分依据为最后一棵子树的范围,即枚举最后

2020-11-05 21:45:24 30

原创 LDU新生授课1——数组函数结构体排序

时间和空间复杂度问题时间复杂度计算方法:可以理解为循环次数空间复杂度:空间一维开到5e6+7极限,二维开一般1100*1100。无论几维,总体每个不超1e7。比如int a[1100][1100]//合法int a[11000][11000]//不合法一维数组的下标问题int a[10];for(int i=0;i<10;i++) cout<<a[i]<<endl;//下标可用范围只有0~n-1,不要用n和负数!数组过大时无法输入的问题#include

2020-11-02 23:21:16 650

原创 UPC新生赛—— 排序(思维)

问题 O: 排序时间限制: 1 Sec 内存限制: 128 MB题目描述有N* M只奶牛,每只奶牛的头上都印有一个唯一的标识ID,第i头奶牛的ID是正整数i。农夫FJ有一块大农田,FJ把农田划分成N行M列的格子,每个格子都必须有且仅有一头奶牛在里面工作。由于奶牛是无序动物,所以它们随机的各自选取了一个格子就开始工作了。但FJ希望他的奶牛是有序的,FJ希望第1行的奶牛从左往右的ID依次是:1,2,3,…M;第二行的奶牛从左往右的ID依次是:M+1,M+2,M+3,…2*M;…最后一行的奶牛从左往右的I

2020-11-02 21:42:17 117 2

原创 【算法竞赛进阶指南】車的放置(行列模型二分图最大匹配+匈牙利算法)

原题链接思路:根据题意,当在某一点放置车后,该行和该列都不能再放置。所以对行和列建边求最大匹配即可。代码:#include<bits/stdc++.h>using namespace std;const int maxn=210;int g[maxn][maxn];///表示禁止放置int n,m,t;bool st[maxn];int mat[maxn];bool Find(int x){ for(int i=1;i<=m;i++){ if

2020-10-20 00:31:15 24

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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