- 博客(521)
- 收藏
- 关注
原创 HihoCoder 1424 Asa's Chess Problem
一开始搜上下界没有见到费用流,就以为考不到,没有学。今天接着碰到了。。。 其实跟有源汇上下界最大流差不多。也是带了一些有花费的边。 对于这个题,一开始也没分析好。对于每行和每列的点,跟s相连的是已经有的黑子的数目,这是必须流的,也就是下界,上界很明显就是相同的。 然后跟e相连的是题目要求的上下界流量。然后交换怎么体现呢?题目中很亲民的给出每一对点要么行相同,要么列相同,很明显行相同,只会对列有
2017-10-15 21:21:14
476
原创 HDU-5988 Coding Contest
这个题真的又长见识了。题目要求破坏最小的概率,我们可以求出不被破坏的最大概率,因为要乘积最大,所以我们可以取对数变成加。然后跑最大费用最大流就可以了。 然后一直T到死。这里需要加一个eps剪枝,在spfa中,不然就T到死。#include <cstdio>#include <queue>#include <cmath>using namespace std;const int MAXN =
2017-10-14 20:18:06
256
原创 HDU-4372 Count the Buildings
题意:有一系列的楼房,高度从1~n,然后从左侧看能看到f个楼房,右侧看能看到b个楼房,问有多少个方案数满足。 思路:首先就是最高的房屋,我们不管从哪看都会看到的。 那么我们把剩下的房屋分成f-1组和b-1组,也就是分别放左边和右边。每一组的情况:f-1组确保每组最高的在左边就可以。这里它的顺序其实就是任意的圆排列了。同理b-1组的每组最高的在右边就可以了。 我们知道把n个元素分成k个圆排列的方
2017-10-13 22:01:29
271
转载 二元关系最小割
Description高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友。这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科或者理科,那么他们又将收获一些喜悦值。 作为计算机竞赛教练的scp大老板,想知道如何分配可以使得全班的喜悦值总和最大。 Solution因为只有两种选择,并且选择之间有关系,我们
2017-10-13 20:53:21
459
原创 poj2396 Budget
有源汇上下界网络流问题。这里求的只是一个可行流。嗯,感觉没什么好说的。 注意范围。#include <cstdio>#include <queue>#include <cstring>using namespace std;const int MAXN = 200+5;const int MAXM = 20+5;const int inf = 1e9;int n,m;int s,e
2017-10-11 23:20:09
335
原创 sgu-194-Reactor Cooling(无源汇有上下界最大流)
无源汇有上下界的最大流的求法: 简单来说就是默认每条边的流量已经流了下界的流量了。但是这时候可能流不是平衡的,对于每个点来说。这时候就需要我们调节了。 用in[i]表示流入i点的所有下界之和,out[i]表示流出i点的所有下界之和。两者的差如果大于0,表示还需要流出一些流量,那么就加边s到i,流量为两者的差。相同的,如果小于0,表示还需要流入一些流量,那么加边i到t,流量为两者差。最后边的流量的
2017-10-10 21:38:06
489
原创 2-sat总结
1.n个物品,选与不选的问题。如果i与j冲突,则建边:head[i<<1].push_back(j<<1|1);head[j<<1|1].push_back(i<<1);head[j<<1].push_back(i<<1|1);head[i<<1|1].push_back(j<<1);2.2*n个物品,只能选一个的问题。如果有冲突,则建边:if(check(i<<1,j<<1))head[i<
2017-09-29 22:28:06
253
原创 codeforces 864 F
有向图,倍增。 思路:参考大佬的题解 倍增思想,比如求s到t的道路,那么先通过反向图dfs出所有可以到达t的节点。(相当于一棵树)如果s不在其中,输出-1.然后先用正向图的边把st数组初始化一下(用字典序最小的一个)。然后把st[t][0]置为n+1.其他剩余点都保持为0.然后在倍增完成后,如果st[ s ][ TOP ] ==n+1说明x最终可以到达t并且继续走到n+1.(2^TOP>3000
2017-09-27 20:54:22
299
原创 汽车加油行驶问题
给定一个N*N 的方形网格,设其左上角为起点◎,坐标为(1,1),X 轴向右为正,Y 轴向下为正,每个方格边长为1,如图所示。一辆汽车从起点◎出发驶向右下角终点▲,其 坐标为(N,N)。在若干个网格交叉点处,设置了油库,可供汽车在行驶途中加油。汽车在 行驶过程中应遵守如下规则: (1)汽车只能沿网格边行驶,装满油后能行驶K 条网格边。出发时汽车已装满油,在起 点与终点处不设油库。 (2)
2017-09-21 17:19:42
3386
原创 HDU 6214 Smallest Minimum Cut
这个题就是求包含最少边数的最小割。比赛的时候想到的是把第一次最大流跑出来的割边集流量置1,其余的无穷大,然后再跑一次最大流,发现一直wa。 然后网上原来还有另外一种方法,那就是初始流量先乘上一个比边数大的数,然后加一,然后跑一次最大流,最后对乘上的这个数取模,得出来的就是答案。#include <bits/stdc++.h>using namespace std;const int MAXN =
2017-09-18 20:34:16
381
原创 餐巾计划问题
关键是要想到建立二分图,这个确实一开始没想到。 重点是把当天需要的和当天剩下的给分开。这样就可以建图了。 1.对于当天需要的,跟源点连边,流量为rir_i,花费为p。跟汇点连边,花费为0,流量为rir_i。 2.对于当天剩下的,跟源点相连,流量为rir_i,因为当天的肯定会剩下的,然后对于第i天,向第i+1天连边,花费0,流量为inf。因为当天的可以放到第二天。然后对于第i天剩下的,可以向第i
2017-09-15 17:47:31
270
原创 Power OJ 魔术球问题
嗯,如果i+j为平方数的话,就代表可以连边i,j。然后放在柱子上,最多能放多少球,就是在有限的柱子内放更多的球,反过来想,对于确定的球来说,用最少的柱子其实就是求一个最小路径覆盖。那么我们去枚举答案球的个数,然后找到最小路径覆盖数刚好大于给定的n的时候,那么答案就是当时的球数-1。建图不要暴力去建,会超时。我们不难发现,当球的个数加1的时候增加的边其实不多。#include <bits/stdc++
2017-09-13 21:38:42
436
原创 F. Product transformation
嗯,序列写一写可以发现,从最后面开始相邻的差都是杨辉三角。然后走到头,前面还有剩余的话就是2m2^m。啊这里说的是系数。然后我们可以求出循环节来。求出系数来之后先模循环节。循环节其实就是ax==1modma^x == 1\mod m中的x。然后快速幂搞一下就可以了。#include <bits/stdc++.h>using namespace std;typedef long long LL;c
2017-09-12 13:25:06
250
原创 Magical Bridges UVALive - 5988
题意: 有n座塔,每座塔有f层: 1.相邻的两座塔之间第一层可以相互到达,花费是1. 2.同一座塔内,相邻的层之间可以相互到达,花费是1. 3.有m座桥。告诉你bib_i塔的fif_i层和bjb_j塔的fjf_j层可以相互到达,花费是w。 然后给你一个起点(qbiqb_i塔qfiqf_i层)和终点(qbjqb_j塔和qfjqf_j层)问最少花费 最多100座塔,每座塔最多1000000层
2017-09-08 19:53:31
230
原创 CodeForces 125E MST Company(最小度限制生成树)
题意就不说了。 然后求最小度限制生成树的思路网上有很多。 下面是根据思路自己写的一个。#include <cstdio>#include <vector>#include <queue>#include <algorithm>using namespace std;typedef long long LL;const int MAXN = 5000+5;const int inf =
2017-09-04 22:02:21
464
原创 poj 1325 Machine Schedule
题意:k个任务,每个任务可以被A机器的Ai模式干掉,也可以被B机器的Bi模式干掉。嗯,典型的二分图最大匹配问题。 注意:开始的机器是位于0模式的,也就是说如果有任务能被0模式干掉,就不要连边,因为这个任务相当于已经完成了的。#include <cstdio>#include <vector>#include <queue>using namespace std;typedef long lo
2017-09-02 20:44:51
269
原创 poj 1422 Air Raid(最小不相交路径覆盖)
最小不相交路径覆盖 = 顶点数 - 最大匹配#include <cstdio>#include <vector>#include <queue>using namespace std;typedef long long LL;const int MAXN = 120+5;const int inf = 1e9;int n,m;vector<int>head[MAXN];bool vi
2017-09-02 20:27:02
302
原创 poj 2226
题意:给你一个n∗mn*m的图,其中’*’表示需要覆盖的地方,’.’表示不能被覆盖的地方。然后你每次可以在一行或者一列内覆盖掉连续的部分。 思路: 首先我们先按照行和列进行标号。 Sample则转化为:1 0 2 0 0 3 3 3 4 4 4 0 0 0 5 0把这些序号加入行集合,再按列做一次则为:1 0 4 0 0 3 4 5 2 3 4 0 0 0 4 0 加入列集合。
2017-08-28 22:03:50
344
原创 HDU3938 Portal
题意: 有n个点,给你m条无向边,然后有q次询问,每次询问给你一个L,问你对于u到v的所有路径中的每条路径中最长的边的最小值不超过L的这样的点对有多少。 思路:首先考虑每个点对,因为点对之间的决定值只是由最大边来决定。所以贪心一下,边按照从小到大连接,如果之前已经被连接了,那么后面没必要再连接了。 然后每次,询问跑一次是不现实的。嗯,因为大的情况一定包含比它小的情况,所以我们可以离线,排序,处
2017-08-27 17:28:11
256
原创 The Unique MST(次小生成树)
题意: 给你n个点,m条边,问你最小生成树是不是唯一的,如果唯一输出最小生成树的总权值大小,否则就输出“Not Unique!” 思路: 求一下次小生成树看一下是不是和最小生成树总权值大小一样即可。 关于求次小生成树: 求次小生成树#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#inclu
2017-08-26 17:48:16
302
原创 Conscription
题意: 现在要雇佣n个男孩,m个女孩。然后有R个关系。雇佣每个人要花费10000RMB,然后如果某个男孩和女孩之间有一个关系d,那么选择这两个人之后就可以少交dRMB。每个人只能选择一个关系。 思路:每个人只能选择一个关系,这个很关键,也就是说每个点的父亲只有一个,所以说选完关系之后应该是一棵树。那么要使得花费sumd最多,我们把权值改成负的表示花费,就是求一棵最小生成树了。#include <
2017-08-26 15:49:47
313
原创 CF173 C Spiral Maximum
题意:给你一个n*m的格子,每个格子有一个数。现在你可以拿走题目上说明的螺旋图内的数字。必须是整个螺旋图的。问你可以得到的最大值是多少。 思路:我们好好观察图,发现当前的螺旋图的值 = 当前子矩阵 - 上一个螺旋图的值 - 左上角偏下一个的格子点。所以我们可以循环处理。一直到边界。#include <iostream>#include <cstdio>#include <cmath>#inc
2017-08-24 20:50:07
278
原创 CF 821D Okabe and City
题意:给你一个n*m的格子,然后给你一些亮光点的坐标,你开始在(1,1)这个点,每次你可以上下左右走,但是如果格子是黑的,你首先必须要点亮它,你每次可以点亮一行或者一列的所有格子。但是这个技能有两个需要注意的地方: 1.如果你点亮了key行/列,那么当你离开当前key行/列时,你点亮的那些会灭掉。 2.发动技能的时候必须是在亮光的地方。 问你走到(n,m)的最少技能发动次数。如果到达不了,输出
2017-08-23 16:58:44
405
原创 HDU 6166 Senior Pan
Senior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory problems everyday. The task is simple : ZKC will give Pan a directed graph every time, and selects some
2017-08-23 08:57:25
663
原创 Gym 100917F Find the Length
题意:给你一个无向图(邻接矩阵),求每个点所在的最小环的长度,不存在输出-1。 思路:不是很难想到,包含点s的最小环,应该是s到其余点的最短路的边加上一条不是最短路的边,因为单纯靠最短路并不会形成环。这样的话我们先构造出以s为根,以s到其余点的最短路为边的生成树。然后我们去枚举这样的两个点。无非就两种情况: 1.额外边的一个端点包含点s的情况。 2.额外边的两个端点都不包含s的情况。 红
2017-08-22 08:43:30
1255
原创 数论总结
数论总结欧拉定理求欧拉函数素数筛Miller_Rabin 算法进行素数测试 pollard_rho 算法进行质因数分解求1n的素数的个数1e11计算二次剩余计算离散对数原根组合数学第一类斯特林数第二类斯特林数Lucas定理数论总结欧拉定理aφ(n)≡1(modn)a^{\varphi(n)}\equiv 1\pmod nφ(n)\varphi(n) 为欧拉函数使用条件为g
2017-08-19 09:37:22
264
原创 poj3255 Roadblocks (次短路)
Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not want to get to her old home too quickly, because she likes the scenery along the way. She
2017-08-18 19:48:20
357
原创 poj3662 Telephone Lines
Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncooperative, so he needs to pay for some of the cables required to connect his farm to the phone system.T
2017-08-18 16:48:58
373
原创 CF19E Fairy
Once upon a time there lived a good fairy A. One day a fine young man B came to her and asked to predict his future. The fairy looked into her magic ball and said that soon the fine young man will meet
2017-08-18 14:17:45
546
原创 HDU5361 In Touch (dij)
题意:求1到其余的点的最短路。只不过这个边有些特殊,是可以到达一个区间的范围的点。 思路:可以想到每个点最多更新一次,利用dij做法的话。跟平常dij不同的是,因为1个点到区间范围内的点的花费相同,座椅每次更新出来的最小值应当是dis[u]+cost[u]。堆应当按照这个排序,才能确保更新的值最优。 然后区间覆盖的问题,我们可以利用并查集来维护。#include <cstdio>#includ
2017-08-17 09:13:42
305
原创 poj3522 Slim Span
题意: 让你在一个无向图中找到一棵树,使得树中最大边和最小边之差最小。 思路:如果我们知道最小边是谁的话,那么最小的最大边一定是最小生成树中的最大边了。那么不难想到我们可以枚举最小边,然后构造最小生成树,然后用最大边减去最小边更新答案。#include <cstdio>#include <algorithm>#include <cstring>#include <vector>#incl
2017-08-16 16:43:44
228
原创 HDU6118 度度熊的交易计划
度度熊的交易计划Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 527 Accepted Submission(s): 181Problem Description 度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题
2017-08-14 02:14:41
391
原创 B - Game of the Rows
B. Game of the Rows time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Daenerys Targaryen has an army consisting of k groups of soldiers, the
2017-08-14 02:08:59
568
原创 poj3692 Kindergarten
Kindergarten Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7244 Accepted: 3568 DescriptionIn a kindergarten, there are a lot of kids. All girls of the kids know each other and
2017-08-11 21:57:38
269
转载 最大团
#include<cstdio>#include<cstring>#define N 1010bool flag[N], a[N][N];int ans, cnt[N], group[N], n, vis[N];// 最大团: V中取K个顶点,两点间相互连接// 最大独立集: V中取K个顶点,两点间不连接 // 最大团数量 = 补图中最大独立集数bool dfs( int u, int
2017-08-11 21:53:06
1479
原创 CodeForces - 731C Socks
Arseniy is already grown-up and independent. His mother decided to leave him alone for m days and left on a vacation. She have prepared a lot of food, left some money and washed all Arseniy’s clothes.T
2017-08-11 20:50:44
405
原创 CodeForces - 343D Water Tree
Mad scientist Mike has constructed a rooted tree, which consists of n vertices. Each vertex is a reservoir which can be either empty or filled with water.The vertices of the tree are numbered from 1 to
2017-08-11 19:20:23
356
原创 HDU 6103 Kirinriki
We define the distance of two strings A and B with same length n is disA,B=∑n−1i=0|Ai−Bn−1−i|dis_{A,B}=\sum_{i=0}^{n−1}|A_i−B_{n−1−i}| The difference between the two characters is defined as the diff
2017-08-11 00:37:08
342
原创 HDU2643 Rank 第二类斯特林数
第二类斯特林数把一个包含n个元素的集合分成k个非空子集的方法数: 初始值: S2(n,0)=0,S2(n,k)=0(n<k)S_{2(n,0)}=0,S_{2(n,k)}=0(n<k) S2(n,1)=S2(n,n)=1S_{2(n,1)}=S_{2(n,n)}=1 递推式: S2(n,k)=S2(n−1,k−1)+S2(n−1,k)∗kS_{2(n,k)}=S_{2(n-1,k-1)}+
2017-08-09 21:41:47
1375
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅