自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Tree Constructer(构造题)(2020icpc济南J)

Tree Constructer题意:给定一棵树,让你给节点赋值,要求相连的两个点的值进行或操作后结果为260-1.思路:因为结点数不超过100,所以对于结点分类,可以分成2类,记一类为黑点,一类为白点,可以用二分图染色,但是一棵树,我直接按照结点1为根的层次来进行分类,奇数层为一类,偶数层为一类,分类后取数量少的点为白点,因为结点最多100,分为两类,保证了少的点个数不超过50。首先明确每个数为60位二进制表示。对于白点,我们先赋予新id,然后对于每个白点,我们先赋值为全1,然后最高位置0,接

2021-01-26 18:28:30 441

原创 洛谷 P4116 Qtree3(树链剖分+树状数组)

P4116 Qtree3思路:树链剖分+树状数组。对于白色,起始都赋值INF,对于反转,白色的我们反转黑色,即改变成它在树剖时的dfs序,黑色变白色就改成INF就行。这道题可以把1当做树根,每次查询1~u路径上第一个黑点就是深度最小的那个点,也就是dfs序最小的那个点。然后用树状数组查询区间最小值就行。代码:#include<bits/stdc++.h>using namespace std;#define INF 0x3f3f3f3fconst int N=1e5+5;int

2020-12-09 19:04:00 183

原创 洛谷 P3950 部落冲突(树链剖分+树状数组)

P3950 部落冲突题意:给一棵树,Q操作是u,v是否可达,C操作是u,v间的简单路径不可走,U是撤销第i个C操作。思路:树链剖分+树状数组。树链剖分点权改边权,对于u,v间的简单路径不可走可以边权都加1,撤销就是边权都减1,询问就树状数组维护区间和,0就可达。代码:#include<bits/stdc++.h>using namespace std;const int N=300005;int son[N];//son[i]表示i的重儿子int size[N];//size

2020-12-09 18:07:26 152

原创 The Maximum Unreachable Node Set(floyd+二分图最大独立集)(2017icpc南宁M)

The Maximum Unreachable Node Set题意:给张有向无环图,然后求一个最大的点集,点集里任意两点没有路径可达。思路:先跑一遍floyd,求出两点可达性,然后把一个点拆成两个点看,对于一个点来说,对于每个可达的点连一条对应点的拆点,这样就形成一个二分图,跑floyd可以完成,然后对于题意,就是求二分图的最大独立集。数据小,匈牙利即可。代码:#include <bits/stdc++.h>using namespace std;const int maxn=

2020-12-02 19:48:12 124

原创 洛谷 P3038 [USACO11DEC]Grass Planting G(树链剖分+树状数组)

P3038 [USACO11DEC]Grass Planting G题意:给一棵树,初始边权为0,两个操作,每次操作给一个点对,一个操作是点对间的简单路径边权+1,另一个是求点对间简单路径的路径和。思路:树链剖分,把边权变点权,树状数组修改区间,维护区间和。代码:#include<bits/stdc++.h>using namespace std;const int N=100005;int son[N];//son[i]表示i的重儿子int size[N];//size[i

2020-12-02 18:49:09 138

原创 洛谷 P4114 Qtree1(树链剖分+树状数组)

P4114 Qtree1思路:树剖后,对于一条边来说,把边权赋给儿子节点,然后树状数组更新,求区间最大值。代码:#include<bits/stdc++.h>using namespace std;const int N=100005;struct edge{ int to,cost;};struct Edge{ int u,v,w;};vector<Edge> e;int son[N];//son[i]表示i的重儿子int size[N];//si

2020-12-02 11:24:28 129

原创 洛谷 P3128 [USACO15DEC]Max Flow P(树链剖分+树状数组)

P3128 [USACO15DEC]Max Flow P题意:给一颗树,每次操作给一个点对,点对间的简单路径上所有点权值加1,问最后最大的点权。思路:树链剖分+树状数组代码:#include<bits/stdc++.h>using namespace std;const int N=50005;int son[N];//son[i]表示i的重儿子int size[N];//size[i]表示i为根包含自己的字数节点个数int f[N];//f[i]表示i的父亲int de

2020-12-01 11:03:59 113

原创 洛谷 P2590 [ZJOI2008]树的统计(树链剖分+树状数组)

P2590 [ZJOI2008]树的统计思路:树链剖分+2个树状数组。注意权值可以取负数,求最大值时要注意。代码:#include<bits/stdc++.h>using namespace std;const int N=100005;int son[N];//son[i]表示i的重儿子int size[N];//size[i]表示i为根包含自己的字数节点个数int f[N];//f[i]表示i的父亲int dep[N];//dep[i]表示i的深度vector<i

2020-11-30 23:43:40 227

原创 洛谷 P3178 [HAOI2015]树上操作(树链剖分+树状数组)

P3178 [HAOI2015]树上操作思路:树链剖分+树状数组代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=100005;int son[N];//son[i]表示i的重儿子int size[N];//size[i]表示i为根包含自己的字数节点个数int f[N];//f[i]表示i的父亲int dep[N];//dep[i]表示i的深度vector<i

2020-11-30 22:25:57 96

原创 洛谷 P3384 【模板】轻重链剖分(树链剖分+树状数组)

P3384 【模板】轻重链剖分思路:树链剖分模板题代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=100005;int son[N];//son[i]表示i的重儿子int size[N];//size[i]表示i为根包含自己的字数节点个数int f[N];//f[i]表示i的父亲int dep[N];//dep[i]表示i的深度vector<int>

2020-11-30 16:17:48 101

原创 Tree(换根dp)

Tree题意:看题面。思路:换根dp模板题。选任意一点为根节点,dfs一遍求包含当前节点,子树有多少节点,求根节点的答案。再dfs一遍换根dp,对于每个转移,让子节点为根,那么子节点包含子节点以及子树的节点深度都会减1,剩下的点深度都会加1,按照这个思路dfs一遍转移就行,最后输出答案。#include<bits/stdc++.h>const int N=1e6+5;vector<int> G[N];int son[N],ans[N],d[N],n;void add

2020-10-28 23:43:08 203

原创 CodeForces - 1422D(建图+最短路)

CodeForces - 1422D题意:二维平面给一个起点和一个终点,给m个传送门,开始位于起点,每次可以走上下左右四个方向,花费为1,当位于和给的传送门有相同的x或者y,可以直接传送到传送门,花费为0,问起点到终点的最短花费。思路:答案一定是起点直接走到终点,或者起点走到传送门,再从传送门走到终点。对于任意不是传送门的两个点,距离为abs(x1-x2)+(y1-y2),但是有了传送门,可以先到传送门,再从传送门到目标点,可能距离会小。而任意点到传送门的距离为min(abs(x1-x2,y1-y2

2020-10-20 11:11:36 180

原创 CodeForces - 1423B(二分答案+二分图最大匹配)

题意:给一个二分图,以及边权,让你求在满足完美匹配的同时,使得得到完美匹配中所有边权的最大值最小。思路:看到最大值最小,直接想到二分,二分答案,然后跑二分图看看是否是完美匹配。#include<bits/stdc++.h>const int maxn=2e4+5;struct edge{ int u,v,w;};vector<edge> e;vector<int> G[maxn];int un,n,m;int mx[maxn],my[maxn];

2020-10-19 16:10:28 304

原创 寒假训练POJ-3268题解

问题链接:POJ-3268思路一开始以为就是用多次最短路来求解,把各个奶牛到终点的最短距离算出来,再把终点到各个奶牛的最短距离算出来,计算每头奶牛所用最短时间,输出最大的,结果超时了,看了别人的题解才恍然大悟。因为前者需要运行多次最短路,后者只用一次就可以解决问题,由于前者的原因超时了。后者不变,需要改变求前者时间的办法,因为是单向的路径,所以如果把路径全部反过来,再以终点作为起点来计算到各个...

2019-02-26 19:48:59 126

原创 寒假训练POJ-2387题解(最短路)

问题链接:POJ-2387思路典型的最短路问题,题目要求是从后往前走,其实从前往后走也是一样的,要注意两个问题,路径是双向的,而且一条路径会有多条路程,在这个坑卡了好久……AC代码#include&lt;iostream&gt;#include&lt;algorithm&gt;using namespace std;int cost[1005][1005];int d[1005];...

2019-02-25 21:04:31 189

原创 寒假训练HDU-2181题解

问题链接:HDU-2181思路深度优先搜索。一开始没有什么思路。。然后百度看了别人的题解,感觉好厉害。。题目要求按字典顺序输出,其实只要按照输入的从左到右搜索,以为给出的相邻城市已经是从小到大的了,所以搜索下来就是按照字典顺序的了。AC的代码#include &amp;lt;iostream&amp;gt;#include &amp;lt;algorithm&amp;gt;using namespace std;i...

2019-02-02 21:02:37 142

原创 寒假训练HDU-2067题解(卡特兰数)

问题链接:HDU-2067思路经典的卡特兰数问题,主要还是求卡特兰数,要注意给的n的范围,注意求卡特兰数的方法是否会超时,是否会溢出。AC的代码#include&lt;iostream&gt;using namespace std;void f();long long int ctl[109] = { 1,1 };int main(){ f(); int n, i = 1;...

2019-01-31 21:23:11 168

原创 寒假训练HDU-2049题解(错排)

问题链接:HDU-2049思路组合数加错排问题,答案为答对新娘的组合数和打错新娘的错排数的乘积。注意要用long long int.AC的代码#include&amp;amp;lt;iostream&amp;amp;gt;using namespace std;long long int f(long long int );long long int g(long long int );int main(){...

2019-01-30 00:14:24 149

原创 寒假训练HDU-2612题解

问题链接:HDU-2612思路分别以Y和M作为起点,进行两次BFS,然后求都可以到的@的最小步数和。。有个坑没注意坑了我好久,一直以为Y在[0][0],原来Y的开始位置是随机的。AC的代码#include&lt;iostream&gt;#include&lt;queue&gt;using namespace std;int yidong[4][2] = { {0,1},{0,-1},...

2019-01-29 23:34:23 134

原创 寒假训练HDU-1576题解

问题链接:HDU-1576思路这道题可以用欧几里得扩展来算,但是看到网上的题解有一个方法感觉挺简单的,题解作者叫试探法。和欧几里得扩展一样,也是求方程,然后求解。根据题意,输入的n=A%9973(没有输入A),A%B=0(A必能被B整除),B与9973互素(GCD(B,9973)=1)。设x=(A/B)%9973(x是最终想计算的值,满足0&lt;=x&lt;=9972),则9973k+x=A...

2019-01-29 22:27:24 179

原创 寒假训练POJ-3087题解

问题链接:POJ-3087思路这道题放在了算法题里。。但是感觉没用到什么算法。。可能是我还不懂。。我就是直接用代码实现了问题里面的步骤进行循环。AC的代码#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;string he(string x, string y);string s1(string x)...

2019-01-29 20:03:20 150

原创 寒假训练HDU-1241题解

问题链接:HDU-1241思路简单的深度优先搜索。AC的代码#include&lt;iostream&gt;using namespace std;void dfs(int , int );int yidong[8][2] = { {1,0},{-1,0},{0,-1},{0,1},{-1,-1},{1,-1},{-1,1},{1,1} };char a[105][105];in...

2019-01-28 13:30:17 193

原创 寒假训练POJ-3984题解

问题链接:POJ-3984思路广度优先搜索后,再从终点出发,找出最短的路径记录下来,最后输出。AC的代码#include&lt;iostream&gt;#include&lt;queue&gt;#include&lt;vector&gt;using namespace std;int main(){ char a[5][6]; int a1[5][5] = { 0 }; que...

2019-01-28 13:27:08 125

原创 寒假训练UVA-424题解

问题链接:UVA-424思路高精度运算。AC的代码#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;string f(string , string );int main(){ string a, b = "0"; while (cin &gt;&gt; a) { if (a == "0"...

2019-01-28 13:22:44 84

原创 寒假训练POJ - 1611题解

问题链接:POJ - 1611思路并查集。按照输入给出的条件建立起集合,然后将0所在的元素个数输出出来。AC的代码#include&lt;iostream&gt;#include&lt;vector&gt;using namespace std;int find(int );void built(int , int );int a[30000];int main(){ in...

2019-01-28 13:19:42 132

原创 第二次周赛HDU-1241题解

问题链接:HDU-1241问题简述有多组数据,每组数据第一行输入两个正整数m,n,下面m行,每行n个字符,字符由‘@’与‘*’组成一个矩形,令‘@’且与此符号相邻(上下左右对角)的‘@’都算为一组,计算共有多少组并输出。思路深度优先搜索。AC通过的C++语言程序如下:#include&amp;lt;iostream&amp;gt;#include&amp;lt;cstring&amp;gt;using names...

2018-12-20 20:18:55 190

原创 第二次周赛HDU-1002题解

问题链接:HDU-1002问题简述第一行输入一个正整数n,表示有n组数据,每组数据一行,每行2个位数不超过1000的正整数,计算出这两个数的和,并按要求输出。思路高精度运算,数字过大,所以用字符串来储存,一位一位相加,最后再输出。AC通过的C++语言程序如下:#include&lt;iostream&gt;#include&lt;string&gt;#include&lt;vect...

2018-12-19 19:15:48 438

原创 第二次周赛HDU-1061题解

问题链接:HDU-1061问题简述第一行输入一个数n,下面有n组数据,每组数据输入一个数m(1&lt;=m&lt;=1,000,000,000),然后输出mm的个位数。思路当时在周赛时不知道快速幂算法,最后是找规律写出来的,后来百度学了一下快速幂,可以用快速幂算法来解。AC通过的C++语言程序如下:找规律:#include&lt;iostream&gt;#include&lt;cm...

2018-12-18 19:34:43 172

原创 第二次周赛HDU-1213题解

问题链接:HDU - 1213问题简述Ignatius要过生日,邀请朋友来,需要计算所需要的桌子数,认识的同学只能一起坐在同一桌,如果A认识B,B认识C,那么A,C也算相互认识。首先第一行个输入n,表示有n组数据,每组数据第一行包含两个输x,y,x表示朋友的总人数,y表示有y组对应关系,接下来y行每行表示一组对应关系,最后输出所需桌子数。思路并查集算法,最后求出桌子数即可。AC通过的C+...

2018-12-18 18:36:19 170

原创 第二次周赛HDU-1019题解

问题链接:HDU-1019问题简述第一行输入一个整型数n,表示有n组数据,每组数据一行,每组数据包含m+1个整型数,第一个数字m表示后面有m个数字,计算出这m个数字的最小公倍数。思路欧几里得算法,首先算出最小公约数,然后用最小公约数可以算出最小公倍数。例如:a,b的最大公约数是c,那么a,b的最小公倍数为a*b/c。AC通过的C++语言程序如下:#include&lt;iostream...

2018-12-18 18:30:00 155

原创 第二周HDU-2055题解

问题链接:HDU-2055问题简述定义 f(A) = 1, f(a) = -1, f(B) = 2, f(b) = -2, … f(Z) = 26, f(z) = -26,在第一行输入n,下面n行,每行一组数据,每组数据包含一个字母,一个整数,每组数据输出y+f(x)。思路输入n,用for循环循环n次,定义一个函数计算函数f(x),大学字母时,f(x)=x-64,小写字母时等于-f(x-3...

2018-12-14 19:25:57 184

原创 第二周CodeForces-131A题解

问题链接:CodeForces-131A问题简述输入一串字母,如果这串字母只有一个字母,或者以小写或大写开头后面都是大写字母,那么大写全部变成小写,小写全部变成大写,然后输出,否则不改变直接输出。思路就考虑输入的字母是否需要改变大小写,对输入字符串进行判断。可以用一个变量k进行判断结果记录,如果需要改变,就记为1,否则记为0.最后对k判断来输出。AC通过的C++语言程序如下:#incl...

2018-12-13 23:33:22 194

原创 第二周CodeForces - 110A题解

问题链接:CodeForces - 110A问题简述记4和7为幸运数字,输入一个数n (1 ≤ n ≤ 1018),如果n中包含4或7个幸运数字,那么就输出“YES”,否则输出“NO”。思路主要还是把英文题目读懂吧,读懂还是挺简单的。用字符数组储存输入的数字容易进行一位一位比较,然后按照题目,符合要求的就输出“YES”,否则输出“NO”。AC通过的C++语言程序如下:#include&...

2018-12-13 21:42:19 198

原创 第二周HDU-2019题解

问题链接:HDU-2019问题简述有多组数据,每组数据包含两行,第一行输入两个输n,x,第二行是n个整数从小到大排列,需要把x插入这行数中并且仍是从小到大排列,然后输出插入后的这行数,如果n,x都为0则结束。思路把输入的数从小到大放到一个数组中,然后比较x和最小最大的数的大小,如果小于等于最小的数,就先输出x,然后按顺序输出数列,如果大于等于最大的数,就先按顺序输出数组,最后输出x,否则就...

2018-12-13 21:30:59 135

原创 第二周HDU-2010题解

问题链接:HDU-2010问题简述输入多组数据,每组数据包含两个整数n,m(100&lt;=n&lt;=m&lt;=999),从小到大输出n到m之间的水仙花数(“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身),每个水仙花数之间以空格隔开,如果没有,输出“no”。思路运用for循环,寻找n到m之间所有的水仙花数,然后放入一个数组中,按照题目要求输出。AC通过的C++语言程序如下...

2018-12-13 20:44:49 224

原创 第二周HDU-1004题解

问题链接:HDU-1004问题简述第一行输入一个整数n,表示热气球的个数,接下来n行每行输入一个颜色单词(长度小于15个字母),找出出现次数最多的颜色,并输出这个颜色。思路运用map,对每个颜色出现的次数计数,最后再输出次数最多的颜色。(我打的程序有个bug……在第二次输入时有,会循环两次,所以在30行的if里面加了个if条件语句,将这个bug避免掉)AC通过的C++语言程序如下:#i...

2018-12-13 20:22:17 285

原创 第二周HDU-2057题解

问题链接:HDU-2057问题简述输入多组数据,每组数据包含两个十六位进制数,计算两数之和,以十六位进制输出。思路用函数直接输入十六位进制数,然后相加,以十六位进制数输出,不过要注意输出的十六位进制输字母的大小写和正负号,需要做处理(基本上都是百度的……)。AC通过的C++语言程序如下:#include&lt;iostream&gt;#include&lt;iomanip&gt;u...

2018-12-12 19:59:47 290

原创 第二周HDU - 2091题解

问题链接:HDU - 2091问题简述输入组成三角形的符号和三角形的高,输出一个空心三角形。思路找出三角形的规律,用循环输出符号和空格,注意题目是要求三角形之间才用空出一行。AC通过的C++语言程序如下:#include&lt;iostream&gt;using namespace std;int main(){ char a,i=0; int b; while (cin &...

2018-12-12 19:34:10 217

原创 第二周HDU-6292题解

问题链接:HDU-6292问题简述第一行输入正整数T表示题数,每道题第一行输入整数n,m分别表示验题人数量以及AC了该题的队伍数量,第二行输入n个正整数依次表示每个验题人的代码字节数,第三行输入m个正整数依次表示每支AC队伍的代码字节数,若m=0m=0则该行为空行,最后按照题目格式分别输出最短的验题人代码字节数和最短的选手代码字节数。思路建立两个数组分别存放验题人代码字节数和选手代码字节数...

2018-12-12 18:28:54 141

原创 第二周HDU-1232题解

问题链接:HDU-1232问题简述输入两个正整数n,m,n为城镇数对应城镇编号,m为两座城镇之间的道路数,输入m组,每组两个城镇编号,表示之间有道路连通,求还需要建多少条道路能使每个城镇之间,不一定有直接的道路相连,只要互相间接通过道路可达即可。思路上周的周赛题,看了题目没有想法,后来看了帽子学长发的题解,百度简单的学了查并集,然后运用查并集进行解题。AC通过的C++语言程序如下:#i...

2018-12-12 17:57:02 145

空空如也

空空如也

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

TA关注的人

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