![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
。
Rachel caramel
这个作者很懒,什么都没留下…
展开
-
P1807 最长路 拓扑排序
题目:思路:dis[n]数组用来存放到n的最长距离d0队列用来放入度为0的数ind则记录每个点的indegree1.先把每个点指向哪些点以及对应的权值记录下来2.考虑到权值可能小于0,所以把每个点的dis都先设为一个很小的负数3.寻找入度为0的点,放到队列中4.把入度为0的点指向的点的dis一一计算一遍,存下最大的dis直到所有的边都计算完成即可。AC代码:#include <cstdio>#include <iostream>#include <al原创 2022-03-06 13:43:37 · 171 阅读 · 0 评论 -
P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G 贪心 二叉堆 优先队列
题目:思路:主要是通过这道题目学习一下二叉堆和优先队列用priority_queue来实现二叉堆(大顶堆和小顶堆)注意要加头文件 #include <queue>默认为大顶堆 priority_queue<int> q 小顶堆 priority_queue<数据类型,vector<数据类型>,greater<数据类型>> qeg:priority_queue<int,vector<int>,greater<i原创 2022-03-06 11:58:23 · 232 阅读 · 0 评论 -
P1195 口袋的天空 最小生成树
题目:思路:只要算出需要连接几条边应该就没问题了#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <queue>#define maxn 1111using namespace std;int n,m,k,u,v,w;原创 2022-02-27 10:10:45 · 90 阅读 · 0 评论 -
P1194 买礼物 最小生成树
题目:输入输出样例样例1:input:1 10output:1样例2:input:3 30 2 42 0 24 2 0output:7思路:emmm怎么说,如果不是在这个题单里我可能不会一下子就想到最小生成树。如果想到了应该还是方便的。#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <cma原创 2022-02-26 22:06:13 · 241 阅读 · 0 评论 -
P2121 拆地毯 最小生成树
题目:输入输出样例input:4 31 2 42 3 33 1 131 31 41 3output:3-13思路:类似最大生成树#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <queue>#d原创 2022-02-26 20:43:55 · 81 阅读 · 0 评论 -
P1991 无线通讯网 最小生成树
题目:输入输出样例Input:2 40 1000 3000 600150 750output:212.13思路:一开始想复杂了(想把最长边的顶点安上卫星电话,然后balabala),实际上最长边都不一定用得到。m个卫星电话点可以连m-1条边,然后倒着算一下就ok了。可参考P2872 [USACO07DEC]Building Roads S#include <cstdio>#include <iostream>#include <cstring&原创 2022-02-26 20:23:27 · 176 阅读 · 0 评论 -
P2872 [USACO07DEC]Building Roads S 最小生成树
题目:输入输出样例input:4 11 13 12 34 31 4output:4.00思路:连通问题考虑最小生成树法一:prim算法(参考模板),原模板是将lowcost[i]=0认为是用过的点,所以我们将已经连起来的边的距离设为-1以示区别。我一开始的想法是将每个边都加到ans里,然后补一个m就行,但是题目中所给的边可能会成环(即不是每条边都可以用到),所以需要一个cnt来记录ans里加了多少个-1。#include <cstdio>#include &l原创 2022-02-24 21:45:13 · 414 阅读 · 0 评论 -
P3366 【模板】最小生成树
题目:输入输出样例:input:4 51 2 21 3 21 4 32 3 43 4 3output:7注:re的两大原因:1.部分变量没开成全局变量2.数组越界代码:Kruskal算法:应该说是一种暴力吧,将边按照权值排序,然后按顺序选取,如果选取后会形成环则舍弃这条边,直到变成树,即边数=节点数-1#include <cstdio>#include <iostream>#include <cstring>#include原创 2022-02-22 17:10:55 · 288 阅读 · 0 评论 -
P1892 [BOI2003]团伙 并查集
题目:输入输出样例input:64E 1 4F 3 5F 4 6E 1 2output:3思路:并不是两个人一个团体,而是在一个团体中的人都需要是朋友。把朋友(敌人的敌人=朋友)合并在一起。代码:错误:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <vector>#include <原创 2022-02-21 13:03:48 · 420 阅读 · 0 评论 -
P1536 村村通 并查集
题目:样例:input:4 21 34 33 31 21 32 35 21 23 5999 00output:102998思路:如果道路数量为0,则直接输出n-1。如果不为0,则在输入后,求出有几个fa,然后-1(把几个fa连起来所需的线条个数)代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#inc原创 2022-02-21 08:56:29 · 507 阅读 · 0 评论 -
P1551 亲戚 并查集
题目:思路:并查集可以看具体介绍这道题很明显就是利用并查集输入输出样例:input:6 5 31 21 53 45 21 31 42 35 6output:YesYesNo代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <vector>#include <queue&g原创 2022-02-21 08:05:28 · 374 阅读 · 0 评论 -
***1091. 六度空间
题目:代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <vector>#include <queue>#define maxn 11111using namespace std;vector<int> a[maxn];int x,y,n,m,ans,dis[maxn];boo原创 2022-02-20 10:50:54 · 322 阅读 · 0 评论 -
***1087. 地下迷宫探索
题目:代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <vector>#define maxn 11111using namespace std;vector<int> a[maxn];int x,y;int n,m,s;int ans[maxn];int cnt=1,res=1;原创 2022-02-19 17:28:50 · 156 阅读 · 0 评论 -
***1086. 哥尼斯堡的七桥问题
题目:代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <vector>#define maxn 11111using namespace std;vector<int> a[maxn];int x,y,cnt;int n,m;bool visited[maxn];void dfs(i原创 2022-02-18 21:32:47 · 145 阅读 · 0 评论 -
***1072. 二叉搜索树
题目:代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define maxn 1111111using namespace std;int x;struct node{ int data; node* le=nullptr; node* ri=nullptr; void post_print()原创 2022-02-18 11:52:39 · 115 阅读 · 0 评论 -
***1070. 下落的小球
题目:代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define maxn 11111111using namespace std;int n;bool a[maxn];int power(int x){ int res=1; for(int i=1;i<=x;i++) { res原创 2022-02-18 11:48:12 · 155 阅读 · 0 评论 -
***1068. 最小权值路径
题目:代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define maxn 11111char s1[maxn], s2[maxn];int in[maxn], post[maxn]; // 中序和后序const int INF =0x3f3f3f3f;struct node { // 二叉树结点 int data; /原创 2022-02-15 22:16:52 · 445 阅读 · 0 评论 -
1066. 还原二叉树
题目:样例:input:9ABDFGHIECFDHGIBEACoutput:5思路:前序遍历:根节点->左节点->右节点中序遍历:左节点->根节点->右节点前序遍历的第一个必然是根节点,接着可以在中序遍历里找到这个根节点,随之确定右节点。代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#inclu原创 2022-02-12 21:15:01 · 478 阅读 · 0 评论 -
1062. 鞍点
题目:样例:input:34 3 6 5 82 1 7 6 71 2 5 3 44 3 8 9 101 1 9 8 21 6 7 8 11 9 1 1 91 1 1 7 11 23 1 1 11 1 1 24 110 20 11 8 91 20 12 11 103 30 15 21 218 20 20 3 129 50 52 70 61output:case #0:2 2case #1:-1 -1case #2:0 11 13 1思路:先找出每一行原创 2021-12-06 15:01:53 · 218 阅读 · 0 评论 -
1065. 树的相关操作 (模板题)
题目:样例:input:1 -12 13 24 35 46 57 58 69 710 711 812 913 914 1015 10output:1 2 3 4 5 6 8 11 7 9 12 13 10 14 1511 8 6 12 13 9 14 15 10 7 5 4 3 2 11 2 3 4 5 6 7 8 9 10 11 12 13 14 151511 12 13 14 1557思路:#include <cstdio>#incl原创 2021-12-06 13:22:53 · 216 阅读 · 0 评论 -
1064. 树的层号表示法(模板题)
题目:样例:input:5(0,A) (1,B) (2,D) (2,E) (1,C)output:DEBCA思路:第一次写链表表示的树的题,感觉不太熟悉,参考了代码对结构体套结构体也稍微有了点了解最后又自己重新写了一遍,需要注意每次都需要把后面的一个换行符用getchar读掉代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>原创 2021-12-05 22:24:37 · 425 阅读 · 0 评论 -
1063. 树的双亲存储法
题目:样例:input:10-1 0 0 0 1 1 1 3 3 8output:4 5 6 1 2 7 9 8 3 0反思:拖延症晚期患者了…好久都没A题了(崩溃大哭)可能是一开始对树这一块有点畏惧心理,一直拖着…思路:其实主要是学习了一下vector的用法,看了一下书…代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>原创 2021-11-30 21:43:57 · 547 阅读 · 0 评论 -
1061. 二维数组排序
给定的模板:#define M 100//********** Specification of SortLines**********void SortLines(int (*p)[M], int n, int m);/* PreCondition:p points to a two-dimensional array with n lines andm integers in each linePostCondition:array is sorted satisfying to th.原创 2021-11-13 16:21:32 · 397 阅读 · 0 评论 -
1060. 数组排序
样例:input:3109 6 3 10 3 10 6 4 3 41010 9 8 7 6 5 4 3 2 1204 3 7 8 6 5 8 4 2 2 7 9 5 9 6 8 6 6 3 10output:case #0:3 3 3 4 4 6 6 10 10 9case #1:1 2 3 4 5 6 7 8 9 10case #2:6 6 6 6 8 8 8 2 2 3 3 4 4 5 5 7 7 9 9 10思路:struct里搞个cnt记录个数,外面搞个vis[].原创 2021-11-07 15:28:27 · 112 阅读 · 0 评论 -
1058. 成绩排序
样例:Input:5lebron 100a 99god 99james 100is 100output:lebron 100james 100is 100a 99god 99思路:应该算是打卡题了,看清题目就OK了参考代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;con.原创 2021-11-07 11:17:23 · 133 阅读 · 0 评论 -
1057. 排名汇总
样例:input:251234567890001 951234567890005 1001234567890003 951234567890002 771234567890004 8541234567890013 651234567890011 251234567890014 1001234567890012 85output:91234567890005 1 1 11234567890014 1 2 11234567890001 3 1 21234567890003.原创 2021-11-05 19:38:58 · 131 阅读 · 0 评论 -
1048. 稀疏矩阵三元组转化
样例:input:2 2 20 0 11 0 2output:0 0 10 1 2思路:转置矩阵知道的话还是很方便的,在输入的时候直接x和y换个位置,然后排序就好参考代码:#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn=11111111;int maxx=-.原创 2021-11-05 10:26:56 · 296 阅读 · 0 评论 -
1040. 最长回文子串 dp
样例:input:3abcabbabababbbacoutput:case #0:1case #1:4case #2:5思路:emmm在dp方面真的是个蒟蒻,啥也不会…状态转移方程:cnt[i][]j=cnt[i+1][]j-1]#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int maxn=222;int n;.原创 2021-11-01 20:55:28 · 98 阅读 · 0 评论 -
1039. 最长连续公共子序列
样例:input:aaaabaoutput:1思路:dp的题还是太不熟悉了,一开始就是用寻找字串的办法拿了个六七十分,当然没办法改对。然后考虑到这道题是dp经典题,所以参考了一下别人的思路:拿个二维数组cnt[i][j]记录a[i]和b[j]是否相等,同时检测上一位是否相等。数组的初始值均为0。状态转移方程:cnt[i][j]=cnt[i-1][j-1]+1需要注意的时,这道题给的数组比较大,如果开这么大的二位数组就会爆栈代码:#include <cstdio>#.原创 2021-11-01 13:20:15 · 133 阅读 · 0 评论 -
1030. 方言翻译
样例input:dog ogdaycat atcaypig igpayfroot ootfrayloops oopslayatcayittenkayoopslayoutput:catehloops思路:这里用的是最一般的hash写法,效率相对低tips:1.gets在处理时遇到回车或者文件末尾才停止,所以需要把两个字符串分开同时也需要注意s的数组要开的大一点不然就会导致数组越界2.gets()的返回值时NULL代码:#include <cstdio>.原创 2021-10-30 23:31:34 · 245 阅读 · 0 评论 -
1056. 统计工龄
input:8 10 2 0 5 7 2 5 2output:0:12:35:27:110:1思路:其实感觉不用sort也可以,打卡题#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn=111111;int maxx=-0x3f3f3f3f;int n,a[max.原创 2021-10-29 11:11:29 · 217 阅读 · 0 评论 -
1043. 字符串模式匹配BM算法
input:lebronjamesisgoatgoatoutput:131 4 4 4 4 4 3 4 4 4 4 4 4 4 2 4 4 4 4 4 4 4 4 4 4 4思路:依旧是不是很懂#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn=111111;int m.原创 2021-10-28 19:25:13 · 152 阅读 · 0 评论 -
1042. 字符串模式匹配KMP算法(未完
input:lebronjamesisgoatgoatoutput:13-1 0 0 0思路:emmm感觉还是似懂非懂,照着ppt的方法敲了C++做法而易,并不是很理解#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn=111111;int maxx=-0x3f3f3.原创 2021-10-28 19:17:57 · 82 阅读 · 0 评论 -
1054. 快速排序
input:74 2 1 3 6 7 5output:3 2 1 4 6 7 51 2 3 4 6 7 51 2 3 4 6 7 51 2 3 4 5 6 7思路:和平时的快排是一样的,需要注意的就是如果两个值相等,也需要继续移动#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const i.原创 2021-10-28 19:15:27 · 84 阅读 · 0 评论 -
1051. 插入排序
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn=111111;int maxx=-0x3f3f3f3f;int n,a[maxn];void insertsort(){ int j; for(int i=2;i<=n;i++) { int t=..原创 2021-10-28 16:22:34 · 80 阅读 · 0 评论 -
1052. 选择排序
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn=111111;int maxx=-0x3f3f3f3f;int n,a[maxn];void selectionsort(){ for(int i=1;i<n;i++) { int k=i;..原创 2021-10-28 15:33:28 · 63 阅读 · 0 评论 -
1050. 冒泡排序
样例:input:51 5 2 3 4output:7 3 2input:51 3 2 5 4output:7 2 2#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn=111111;int maxx=-0x3f3f3f3f;int n,a[maxn];v..原创 2021-10-28 15:19:48 · 87 阅读 · 0 评论 -
1037. 字符串消除
样例:input:3ABCBCCCAAAAAABCoutput:case #0:9case #1:4case #2:2反思:一开始因为这题标了easy,但是一直搞来搞去搞不出来,越想越复杂,给自己整自闭了,本来一直以为自己写的消除这一部分的代码是没有问题,结果在某大佬帮助下理清了解题思路后,用自己的代码在写的时候漏洞百出,果然还是得自己写一些,以为听懂了没啥用。思路:bb了这么多,还是写写思路好了:除了本来输进来的数组之外,另外搞两个数组a[],b[]。a一开始是插..原创 2021-10-27 12:51:44 · 160 阅读 · 0 评论 -
1045. 口令
input:ABCDABCDoutput:4 0input:ABCDCDBAoutput:0 4input:AABCDEFAoutput:0 1思路:只要先计算出字母正确(不管位置)的的个数,然后再去比较位置和字母都正确的的个数,前者-后者=字母正确位置不正确的个数#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>us...原创 2021-10-26 17:05:03 · 108 阅读 · 0 评论 -
1031. 统计字符串个数 dp
input:341020-1output:71235197229思路:这道题真的没啥思路,一开始想用排列组合的办法的,结果死活想不出来,可能是太久没接触dp了+眼瞎,完全没有往这个方向去想,实在是卡了太久了,所以就借鉴了一下度娘上别人的想法。看了蛮多思路的,但是可能因为我理解能力有点差,所以看了很多想法,才慢慢把这个想清楚。我会努力在这里把思路讲清楚(毕竟这也能证明,我真的想清楚了)先补充一下dp吧我个人理解的dp是,要实现某个目的可以分成很多步骤,但每个步骤之间都有联系,需.原创 2021-10-25 18:01:49 · 360 阅读 · 1 评论