acm
题解集合
YYyyCCCcccBb
觉得为时已晚的时候,恰恰是最早的时候。
展开
-
双连通分量
双连通分量无向图中的双连通分量有两种:点双连通分量和边的连联通分量,如果去掉任意一个点之后,这个图还是连通的,就说这个图是点双连通的。如果去掉任意一条边之后这个图还是连通的,就说明这个图是边双连通的。割桥将每一个边-双连通分量分开,low[i]的意义就是low[i]所连的块能返回的最早的祖先,也就是说,low[i]相同的点即为一个边连通分量。Tips点的下标转载 2017-10-02 16:59:00 · 264 阅读 · 0 评论 -
Tarjan无向图最小权值割边
#include #include #include #include #include #include #include using namespace std;#define N 1005struct Edge {int v, next;} e[N * N];struct Bridge {int u, v;} bri[N];int val[N][N];int bnt转载 2017-10-02 17:07:11 · 267 阅读 · 0 评论 -
二分图匹配以及交叉染色
概念最大独立集:求一个二分图中最大的一个点集,该点集内的点互不相连。最小顶点覆盖数:在二分图中,用最少的点,让所有的边至少和一个点有关联。换句话说,假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。最小路径覆盖:找出最小的路径条数,使这些路径覆盖图中所有点。计算方法最大独立集 = 顶点数 - 最大匹配数 = vN + uN - hungary()最小顶点转载 2017-10-02 17:08:23 · 560 阅读 · 0 评论 -
HDU 5025:Saving Tang Monk (BFS + 状压)
题意:给出一个地图,#是墙 K是起点T是终点数字是钥匙,S是蛇,经过此处需要2秒,而如果第二次经过同一个S,第二次需要1秒,钥匙只是一个个拿,按数字大小。 在到达终点时候需要拿到所有钥匙思路:将蛇状压编号,将钥匙记录状态是第几个#include#include#includeusing namespace std;const int N = 105;int vis[N]原创 2017-10-11 15:41:20 · 271 阅读 · 0 评论 -
二分--CodeForces 626C--- Block Towers--
题意: 有A,B两组学生。 A学生n个人 可以搭2的倍数的高塔, B学生m人 可以搭3的倍数的高塔。但是不可以有两个学生塔同样高;求可以用的最少的积木个数搭建的最高的塔 有多高?思路: 搭 2. 搭 3 同高的会是6的倍数。那么将6的倍数分别讨论即可: 方法一:A学生一组可以搭的最矮的塔为 2*n 高B学生一组可以搭的最矮的塔是3*n高为了保证原创 2016-08-09 10:10:55 · 315 阅读 · 0 评论 -
二分 Monthly Expense poj3273
题意:n个数字分成m组。求出每组的和最小的时候为多少#include #include using namespace std;int m,n;int a[100010];int judge(int x){ int cot=1; int flag=0; for(int i=1;i { flag=flag+a原创 2016-08-09 13:18:57 · 254 阅读 · 0 评论 -
#1128 : 二分·二分查找&ѭ : 二分·二分查找之k小数
数组长度为N,保证没有重复的数。一个简单有效的方法是对数组进行排序后使用有序数组的二分查找,时间复杂度为O(NlogN)。观察我们第一个算法,对于选定的Mid。如果数组满足a[L..Mid-1]既然如此,那么我们可以通过一次遍历交换将比a[Mid]小的数放到a[Mid]左边,比a[Mid]大的数放到a[Mid]右边。(这里使用了快速排序的思想)其他部分仍然同有序数组的二分查找相原创 2017-05-04 15:21:38 · 1249 阅读 · 0 评论 -
#1141 : 二分·归并排序之逆序对
#1141 : 二分·归并排序之逆序对时间限制:10000ms单点时限:1000ms内存限制:256MB描述在上一回、上上回以及上上上回里我们知道Nettle在玩《艦これ》。经过了一番苦战之后,Nettle又获得了的很多很多的船。这一天Nettle在检查自己的舰队列表:我们可以看到,船默认排序是以等级为参数。但实际上一个船的火原创 2017-05-04 17:40:38 · 389 阅读 · 0 评论 -
几种不同的二分查找
今天多校又卡在找下标上了,队友贡献了一发自己写的二分板子,感觉很好用。保存下来。/*几种二分方法整理元素可以重复 *///lower_bound(num, num+size, x)-num:大于等于x的第一个数的下标 //upper_bound(num, num+size, x)-num:大于x的第一个数的下标 //1.求等于x的最小的index,不存在返回-1int bin原创 2017-08-22 19:43:12 · 1624 阅读 · 2 评论 -
Joy of Flight 2014-2015 ACM-ICPC, NEERC, Northern Subregional Contest
题意:给出风速,最大速度,起点终点,询问是否能到达终点,以及没秒所在位置。思路:风速的矢量分离出来,求对于位移的影响,作用在dx dy上,求平均X的速度和Y的速度#include#include#include#include#include#include #include using namespace std;typedef long long ll;dou原创 2017-10-06 18:56:23 · 420 阅读 · 0 评论 -
I - Instruction 2014-2015 ACM-ICPC, NEERC, Northern Subregional Contest
题意:给出每个火车的入境时间,现在有如干个开关,以及每个火车需要达到的处境口编号,询问开关的切换时间,以及切换编号思路:对于每个火车,前面的火车与后面的火车永远不会相撞(只要让前面的火车一直运动下去)。因此每个节点当前只需要处理当前的火车即可记录节点的状态 (0,1 表示左侧还是右侧开关状态)#include#include#include#include#includ原创 2017-10-06 19:59:13 · 515 阅读 · 0 评论 -
E - Elementary Math 2015-2016 Northwestern European Regional Contest (NWERC 2015)
题意:给出+-*三种运算以及a xxx b两个数字。要求对于每个a.b执行任意一种预算,且结果均不等思路:构造二分图,寻找最大匹配。并且记录匹配的方式。对于每个a-b a*b a+b都构造一个点,连边#include#include#include#include#include #include#include #include using namesp原创 2017-10-09 12:18:55 · 272 阅读 · 0 评论 -
I - Identifying Map Tiles 2015-2016 Northwestern European Regional Contest (NWERC 2015)
题意:给出一个map,询问对应点的坐标思路:找规律可得。x*2 + z y*2+z 对于每个0 1 2 3 分情况讨论#include #include #include #include #include using namespace std;char s[200];int main(){ cin>>s; cout<<strlen原创 2017-10-09 12:21:12 · 461 阅读 · 0 评论 -
J - Jumbled Communication 2015-2016 Northwestern European Regional Contest (NWERC 2015)
题意;对于每个n = x^(x思路:还原回原数字,打表。注意&255#include #include #include #include #include using namespace std;int a[500000];int main(){ long long n; cin>>n; for(int i=0;i<=255;i++)原创 2017-10-09 12:22:12 · 596 阅读 · 0 评论 -
A - Assigning Workstations 2015-2016 Northwestern European Regional Contest
题意: 有若干个人的请求,有无数台机器,每个机器隔K秒就会自锁。询问如何安排才可以让这些人使用机器时,需要解锁的次数最少。输出节省的时间!!!思路:对于每个人的请求找到当前set里面最小的时间+k,如果可以则更改,若当前的时间比最小的时间+k都大,那么这个机器必定会锁上,set弹出。set里存放的是当前工作的人离开的时间#include #include #include原创 2017-10-09 12:24:24 · 363 阅读 · 0 评论 -
D - Debugging 2015-2016 Northwestern European Regional Contest (NWERC 2015)
题意:找bug位置,可以加print,运行。但是+printf 和运行都需要时间,询问最坏情况下,最少需要多少时间思路:之前写的二分,但是WA了,应该是有反例。记忆化搜索一下,这种情况包括了二分,以及更多的情况记忆化搜索:枚举加的printf的个数,找子问题最小#include#include#include#include#include#include原创 2017-10-09 12:56:02 · 283 阅读 · 0 评论 -
最大团模板
#include #include #define N 1010 /* 最大团 = 补图G的最大独立集数 ———>最大独立集数 = 补图G'最大团 */ //最大团模板 bool a[N][N];//a为图的邻接表(从1开始) int ans, cnt[N], group[N], n, m, vis[N];//ans表示最大团,cnt[N]表示当前最大团的节点数,g原创 2017-10-03 14:12:54 · 987 阅读 · 0 评论 -
Triple HDU - 5517
题意:给出 A集合 (每个元素有两个数字)与 B集合(有三个数字), 如果A集合的最后一个数字 与B集合的最后一个数字相等。就可以造出C集合中的一个元素a c d 。最后询问C集合中 有多少个元素没有比他大的思路:用去重的思想构造出acd这些元素。 之后 a c d这类元素按 a,c,d的顺序从大到小排序,在线段树更新的过程中,因为a元素从大到小,c元素作为边界left,查找原创 2017-09-29 13:35:17 · 258 阅读 · 0 评论 -
Conquer a New Region HDU - 4424 (并查集)
题意:给出一个图,找到一个点,使得这个点到达图中所有其他点的流量和最大。 两点流量受到最小边权的限制.思路:之前读错题了。想了个树形DP,后来WA了几次发现不对,也没再想下去。。。其实还是挺简单的。 把所有边权从大到小排序。并查集的思想来做。如果要新加入点,那么边权必定比之前的都小,因此这个点的贡献就应该是另一棵树的节点个数*这条约束边的值+ 这个点所在树的值。最后合并到一棵树就原创 2017-09-30 12:43:11 · 186 阅读 · 0 评论 -
无向图割点(割点后求连通分量个数)
删除一个无向图中的点,能使得原图增加几个连通分量?如果该点是一个孤立的点,那么增加-1个。如果该点不是割点,那么增加0个。如果该点是割点且非根节点,那么增加该点在dfs树中(无反向边连回早期祖先的)的儿子数。如果该点是割点且是一个dfs树的根节点,那么增加该点在dfs树中(无反向边连回早期祖先的)的儿子数-1的数目,也就是增加了以该dfs树的儿子数目-1//求无向图的割顶和桥cons原创 2017-10-02 16:46:02 · 1091 阅读 · 0 评论 -
hdu4587TWO NODES【割点】
题意:询问删除连个点后,最多的连通分量个数思路:模板题。。先枚举一个点要删除掉的,再查询在删除这个x点的图上,所有的连通分量,以及删除i点能增加的连通分量#include#include#include#include#includeusing namespace std;const int maxn=5050; //顶点数int n,m;//n个点 m条边原创 2017-10-02 21:20:27 · 238 阅读 · 0 评论 -
HDU 4588 Count The Carries
题意:询问从a加到b 二进制进位的次数思路:枚举二进制,有x个1 则在当前位上有x/2个进位,对前一位的贡献是x/2#include#includeusing namespace std;typedef long long ll;ll a[100][3];ll solve(ll k, int q){ if(k <= 0) return 0; k++; ll ans原创 2017-10-04 12:20:40 · 240 阅读 · 0 评论 -
hdu 5033 ( Building ) 单调栈
题意: 给出建筑物位置与高度,以及人的位置,询问人看到天空的最大角度思路:对于每个位置,人的视野受到左侧与右侧楼与这个点相连的直线 , 左侧斜率最小的 以及右侧斜率最大的 两条直线限制,如果暴力枚举显然会T可以处理为一个栈的形式: 以左侧楼的限制为例:右侧同理 对于每个位置 如果这个位置是楼,就扔进先除去所有栈中比它高度低的, 再以当前点为基准,所描栈中的点,确保栈中点的到当原创 2017-10-10 15:50:07 · 287 阅读 · 0 评论 -
hdu 5023-A Corrupt Mayor's Performance Art
题意: 给出每次更改和查询,询问区间中有多少种不同颜色。注意初始全部为2号颜色思路:状压每种颜色,查询时候看1出现的状态位#include #include #include #include #include #include using namespace std;const int maxn=1000005; int vis[maxn]; long long a原创 2017-10-11 15:52:27 · 202 阅读 · 0 评论 -
HDU 4819 Mosaic (二维线段树)
题意:给出一个矩阵,要求每次 X+L/2 ,X-L/2 Y+L/2, Y-L/2 区间的最大值和最小值的平均值并且拿这个值更新。思路: 套kuangbin的板子。。。加了写注释存下来。感觉这题很套路 #include #include #include #include #include #include #include #include #include #i原创 2017-10-12 16:38:41 · 213 阅读 · 0 评论 -
hdu 5015-233 Matrix(矩阵快速幂)
题意:给出矩阵的第0行(233,2333,23333,...)和第0列a1,a2,...an(n公式: A[i][j] = A[i-1][j] + A[i][j-1],要求A[n][m]思路: 一年前做过,今天又想了半天。 对于n行,每行对应一个值,构造的233变为230 + 3 这种形式对应的矩阵是a(n-1,1) + (对应的233333....3) = a(n,1).原创 2017-10-12 19:40:20 · 199 阅读 · 0 评论 -
hdu HDU5012-Dice(BFS)
题意:给出旋转方向,询问何时数字可以重合#include #include #include #include #include #include using namespace std;typedef long long ll;int a[10];int b[10];struct node{ int top,bottom,left,right,ft,bk;原创 2017-10-12 20:05:12 · 264 阅读 · 0 评论 -
hdu 5493 Queue 线段树
题意:给出人的身高,以及他前面可能有多少个人比他高,或者后面多少个人比他高,寻找一个典序最小符合条件的序列思路:对于每个位置,用线段树留空的思想来插,类似于poj排队买票的那种线段树插空的题。注意要先询问当前空位置是否够#include #include using namespace std;const int N=1e6+5;struct node{ int n原创 2017-10-14 12:07:14 · 173 阅读 · 0 评论 -
HDU 5578 Friendship of Frog 暴力
题意:字符串,询问最近两个字符#include #include #include #include #include using namespace std;int main (void) { ios::sync_with_stdio(false); int T; cin>>T; int kase = 0; while(T --) {原创 2017-10-14 18:04:04 · 306 阅读 · 0 评论 -
HDU 5583 Kingdom of Black and White 暴力
题意:改最多一个位置,使得值最大。值是 连续相同数字个数的平方和思路:枚举转折点#include#include#include#include#includeusing namespace std;typedef long long ll;const int N = 1e5 + 5;string s;ll a[N], tot, ans, cnt, cal;原创 2017-10-14 18:06:01 · 237 阅读 · 0 评论 -
HDU-5584 LCM Walk(GCD)
题意:给出ex,ey终点,询问起点有多少种情况。 如果当前在x,y, 则下一步可以走到x+ lcm(x,y) ,y 或者是 x , y+ lcm(x,y)思路:对于每个点 (x,y) 如果他是前一步走过来的,那必定是 x,y的较大者 在前一步加上了lcm 。那么如何知道我们前一步加的是多少?假设gcd(x,y) = k 那么 x= nk, y= mk, 则lcm(x,y原创 2017-10-14 18:22:09 · 243 阅读 · 0 评论 -
HDU 5573 Binary Tree
题意:对于给定的数字n,需要从二叉树中找到一条路径,使得路径上的编号 是+ 或者- 。 一直走m个点,使得和为n思路:对于给定的m个节点,我们从根一直向左走,最后一层 (第m层) 特判。具体操作:一直向左走, 假如数字为8 3 , 那么我们从1 -> 2 ->5 我们就可以得到pow(2,3) 为8 。但是如果不是8 是6 ,我们就可以改变1的正负号。当然如果是7呢。原创 2017-10-14 18:29:50 · 193 阅读 · 0 评论 -
hdu 4734 F(x) 数位DP
题意:给出计算公式,寻找0~b之间满足条件的数字个数思路:对于dp [i ] [ j ] 表示了i位数字 不大于j的数字个数和#include #include #include #include using namespace std;int dp[15][50000];int digit[20];int split(int num){ int ans=0原创 2017-10-15 19:06:11 · 256 阅读 · 0 评论 -
POJ 3252 Round Numbers 数位DP
题意:给出a ~b区间,询问区间中所有数字中,1的个数小于等于0的个数思路:dp[i][j] 表示 i个数字中, 0的个数-1的个数 == j-32 因为有32位,所以就设置了初始状态位为32.通过这题大体明白什么时候需要前导0,就是那种前导0对于结果有影响的题。当然一般的题不会产生前导0对于结果的影响,但是有些题目中还会特殊说明,那些不符合条件的需要做说明操作。。。就比如网络原创 2017-10-15 20:19:38 · 311 阅读 · 0 评论 -
线段树--区间更新-区间查询HDU 1698
题意: 给钩子的价值更新,给出区间,查找区间价值思路:加lazy标记,不必更新到每个#include #include #include #include #define lson i#define rson iusing namespace std;struct TreeNode{int lazy,val,left,right,tag;}Tree[原创 2016-08-10 18:48:59 · 538 阅读 · 0 评论 -
线段树-点修改区间查询--hdu1166敌兵布阵
更新每个节点,查找区间值#include #include #define lson i#define rson iusing namespace std;struct TreeNode{ int left; int right; int num;}Tree[50010*4];int a[50010];int ans;voi原创 2016-08-10 18:51:04 · 244 阅读 · 0 评论 -
线段树-点修改--点查询--最值查询 Hdu 1754I Hate It
#include #include #define lson l,m,i1#define rson m+1,r,i1|1using namespace std;int ans;const int MAXN=200010;struct TreeNode{ int left; int right; int number;}Tree[MAXN*3];usin原创 2016-08-10 18:52:50 · 269 阅读 · 0 评论 -
线段树--点更新--点查询--最值差查询--poj3264
题意:给定顺序输入整数,查询第x到第y个数之前 最大值与最小值的差思路:建立线段树。维护每个节点的最大值和最小值#include #include #define lson i1,left,mid#define rson i1|1,mid+1,rightusing namespace std;#define maxn 50010int cows[maxn];str原创 2016-08-10 18:59:12 · 246 阅读 · 0 评论 -
线段树--区间更新区间查询--hdu4027
题意:给定一串数字,再给定两个操作:0.查询 x 到 y的和1.更新 x到 y的每个值 ,使其变为根号倍Notice that the square root operation should be rounded down to integer.将有可能变成的小树变为整数#include stream>#include #include using原创 2016-08-10 19:06:55 · 239 阅读 · 0 评论 -
线段树--区间合并--HDU 1540
题意:题意:D: 破坏村庄,R:修复最后一个破损的村庄,Q:查找X在内的连续区间值有多少思路:建立线段树,维护左右区间值。注意维护变量为: 从左编开始最大连续值,从右边开始最大值,最大连续值 为了维护最后一个被破坏的。需要时刻记录,并且不能只单纯记录一个,而是需要记录顺序。满足先入后出的栈操作,传参即可#include #define lson i1,le原创 2016-08-10 19:11:56 · 283 阅读 · 0 评论