<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zzhsss的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zzhsss</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zzhsss]]></copyright><item><title><![CDATA[天梯赛：L2-001 紧急救援 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123935497</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123935497</guid><author>zzhsss</author><pubDate>Sun, 03 Apr 2022 12:36:55 +0800</pubDate><description><![CDATA[题目详情 - L2-001 紧急救援 (25 分) (pintia.cn)

题解：使用dijkstra算法就可以了，难点在于如何存储路径。我首先十分单纯的用了pair&lt;int,int&gt;进行优化，直接WA了。后面参考了这位大佬的写法L2-001 紧急救援 (25 分)_mb61c049ad36458的技术博客_51CTO博客

发现还有一个最多救援队的约束。呜呜呜。

剩下的就很简单了，用一个结构体存点的编号、s到该点的最短距离、该点的救援队人数。后面始终没搞懂的一点就是为啥要按照距离从大到小的]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-027 名人堂与代金券 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123767115</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123767115</guid><author>zzhsss</author><pubDate>Sun, 27 Mar 2022 00:45:22 +0800</pubDate><description><![CDATA[题目详情 - L2-027 名人堂与代金券 (25 分) (pintia.cn)

题解：就简单的用一个sort对结构体排序。重点在于对输出的处理上，可能有多个相同的分数。比如n个人都是一样的分数，这时就要把全体学生都输出。

Code Segment：


#include&lt;cstdio&gt;
#include&lt;cstring&gt;
#include&lt;algorithm&gt;
using namespace std;
const int maxn=1e5+1;
struct nod]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-025 分而治之 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123766867</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123766867</guid><author>zzhsss</author><pubDate>Sun, 27 Mar 2022 00:22:31 +0800</pubDate><description><![CDATA[题目详情 - L2-025 分而治之 (25 分) (pintia.cn)

题解：思路很简单，就是构建一个图，然后根据输入把图破坏掉，之后判断图中剩下的点是不是单独的。然鹅，TLE了。之后就是对它的优化，我之前的想法是对于每个输入的点，我每次遍历一下全图把该点去掉。后面就是用一个集合把要去掉的点记为非法的点。之后对每个合法的点判断是不是和它相邻的点都是非法的，如果有合法的代表它不是孤立的。

Code Segment：


#include&lt;cstdio&gt;
#include&lt;set&gt]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-016 愿天下有情人都是失散多年的兄妹 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123747010</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123747010</guid><author>zzhsss</author><pubDate>Fri, 25 Mar 2022 22:23:52 +0800</pubDate><description><![CDATA[题目详情 - L2-016 愿天下有情人都是失散多年的兄妹 (25 分) (pintia.cn)

题解：对于每个给出的编号进行层序遍历，把遍历到的元素存进集合里。如果两个集合存在交集，就代表它们存在公共祖先，否则可以结婚。

不过感觉这个有点BUG，编号为0的情况貌似没有考虑到。

Code Segment:


#include&lt;cstdio&gt;
#include&lt;set&gt;
#include&lt;vector&gt;
#include&lt;queue&gt;
#include&]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-020 功夫传人 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123724753</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123724753</guid><author>zzhsss</author><pubDate>Thu, 24 Mar 2022 23:37:37 +0800</pubDate><description><![CDATA[题目详情 - L2-020 功夫传人 (25 分) (pintia.cn)

题解：我的思路是用并查集找到祖师爷，然后进行图的层序遍历。当遇到得道者就把他的功力加起来。（这题中，图的层序遍历要把一层遍历完之后再进行下一层的遍历，这样可以方便计算功力值。）

还是太菜了，要七十多行代码才能解出来

Code Segment：


#include&lt;cstdio&gt;
#include&lt;set&gt;
#include&lt;queue&gt;
#include&lt;cmath&gt;
usin]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-013 红色警报 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123700738</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123700738</guid><author>zzhsss</author><pubDate>Thu, 24 Mar 2022 01:01:06 +0800</pubDate><description><![CDATA[题目详情 (pintia.cn)

dfs解法：用一个集合记录当前存在哪些城市，然后另一个集合把边存起来。首先用dfs判断图中有多少连通分量，之后把攻占城市之后的连通分量算出来。如果攻占之后的连通分量大于等于攻占之前的连通分量+1，说明破坏了城市的连通性。

本来想挑战最短的代码的。。。可惜水平有限呜呜呜

另一种21分解法也是用集合存起来，判断当前集合相邻的点是否有其他的点相连，如果有就是说明该点连通，否则说明破坏了城市的连通性。但对于下图的情况是无法判断的。当破坏点1、2、3时，实际上分成了两个连通分量]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-019 悄悄关注 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123563435</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123563435</guid><author>zzhsss</author><pubDate>Thu, 17 Mar 2022 23:16:59 +0800</pubDate><description><![CDATA[题目详情 - L2-019 悄悄关注 (25 分) (pintia.cn)

无脑使用stl就可以了

Code Segment：


#include&lt;cstdio&gt;
#include&lt;set&gt;
#include&lt;utility&gt;
#include&lt;string&gt;
#include&lt;algorithm&gt;
#include&lt;iostream&gt;
using namespace std;
int main()
{
    int n,m,i]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-017 人以群分 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123562845</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123562845</guid><author>zzhsss</author><pubDate>Thu, 17 Mar 2022 22:41:13 +0800</pubDate><description><![CDATA[题目详情 - L2-017 人以群分 (25 分) (pintia.cn)

思路非常简单，就是把数组从小到大排序，然后以n/2为分界线，算出较小的数的和。之后再就可以得出两者的差了。

Code Segment：


#include&lt;cstdio&gt;
#include&lt;algorithm&gt;
using namespace std;
int main()
{
    int n,a[100001],i,sum=0,count=0;
    scanf("%d",&amp;n);
  ]]></description><category></category></item><item><title><![CDATA[天梯赛：L3-003 社交集群 (30 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123540248</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123540248</guid><author>zzhsss</author><pubDate>Thu, 17 Mar 2022 00:33:58 +0800</pubDate><description><![CDATA[题目详情 - L3-003 社交集群 (30 分) (pintia.cn)

题目是要我们把每个人有部分兴趣相同的集合在一起（不是单纯的求交集，比如有个集合都算是一个集群，因为第一个集合和第二个集合有交集，第二个集合和第三个集合有交集，类比一下函数的传递性就行了），本来想用并查集写的，但并查集不好判断大小。所以只能使用stl大法。

我的思路是将每个人的兴趣都用集合存起来，然后用一个双循环遍历集合，对每对集合求交集，如果存在交集，那就求它们的并集并把并集赋给第二个循环最开始的那个集合的前一个集合，并且将这个]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-034 口罩发放 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123538915</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123538915</guid><author>zzhsss</author><pubDate>Wed, 16 Mar 2022 22:53:20 +0800</pubDate><description><![CDATA[题目详情 - L2-034 口罩发放 (25 分) (pintia.cn)

题目大意很简单，就是一些细节的处理非常恶心。不管是经历了多久，反正是搞出来了。。。

Code Segment：


#include&lt;iostream&gt;
#include&lt;set&gt;
#include&lt;vector&gt;
#include&lt;string&gt;
#include&lt;cstdio&gt;
#include&lt;cstring&gt;
#include&lt;cctype&g]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-039 清点代码库 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123468401</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123468401</guid><author>zzhsss</author><pubDate>Sun, 13 Mar 2022 22:55:23 +0800</pubDate><description><![CDATA[题目详情 - L2-039 清点代码库 (25 分) (pintia.cn)

这就是一道纯stl题，用map存数组（不能是字符串，因为有负数）。然后用vector转存map，进行按值排序。无脑用函数就行了

Code Segment：


#include&lt;cstdio&gt;
#include&lt;vector&gt;
#include&lt;map&gt;
#include&lt;utility&gt;
#include&lt;algorithm&gt;
using namespace std]]></description><category></category></item><item><title><![CDATA[天梯赛：L2-038 病毒溯源 (25 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123463214</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123463214</guid><author>zzhsss</author><pubDate>Sun, 13 Mar 2022 18:04:18 +0800</pubDate><description><![CDATA[题目详情 - L2-038 病毒溯源 (25 分) (pintia.cn)

就是一个简单的图的遍历加dfs，我的方法就是利用并查集找到根节点，在从根节点开始进行dfs。

可怜的蒟蒻不知道怎么存储路径，最后参照这位大佬的做法才完成了这道题天梯赛L2-38 病毒溯源 (25 分)_m0_51385035的博客-优快云博客

就是搞不懂为啥根节点可以这么算。。。


#include&lt;cstdio&gt;
#include&lt;set&gt;
#include&lt;vector&gt;
#incl]]></description><category></category></item><item><title><![CDATA[PAT甲级：1014 Waiting in Line (30 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123457759</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123457759</guid><author>zzhsss</author><pubDate>Sun, 13 Mar 2022 13:05:35 +0800</pubDate><description><![CDATA[题目详情 - 1014 Waiting in Line (30 分) (pintia.cn)

题意：题目的大意是有n个队列，每个队列只能站m个人。当人站满的时候，所有人自成一个队列，当有队列空出来的时候就让队首出队。而每个人对队列的选择遵循以下规则：

1、选人最少的

2、人数相同选编号最小的

要求输出他们得到服务的时间，当得到服务的时间超过17：00时就Sorry。

解析：大概方法就是用结构体数组存储每个编号的队列，然后根据队列的长度和编号进行相应的排序，当队列长度等于m时就要把剩余时间最短的那个]]></description><category></category></item><item><title><![CDATA[PAT甲级：1004 Counting Leaves (30 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123457597</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123457597</guid><author>zzhsss</author><pubDate>Sun, 13 Mar 2022 12:51:32 +0800</pubDate><description><![CDATA[题目详情 - 1004 Counting Leaves (30 分) (pintia.cn)

题意：题目的大概意思就是要你找树的每一层有多少个叶子结点。

分析：这个题目实质上是考察树的遍历。理论上讲，四种遍历都可以完成该题。But，有个stl库的queue不香吗？所以选择层次遍历。用set把该结点的孩子结点存储下来。然后就是傻瓜式的遍历判空。注意当树只有根结点时，第一层的叶子结点数为1。

Code Segment:


#include&lt;cstdio&gt;
#include&lt;set&gt]]></description><category></category></item><item><title><![CDATA[天梯赛：L3-010 是否完全二叉搜索树 (30 分)]]></title><link>https://blog.youkuaiyun.com/zzhsss/article/details/123457417</link><guid>https://blog.youkuaiyun.com/zzhsss/article/details/123457417</guid><author>zzhsss</author><pubDate>Sun, 13 Mar 2022 12:36:51 +0800</pubDate><description><![CDATA[题目详情 - L3-010 是否完全二叉搜索树 (30 分) (pintia.cn)

解析：

题目说有20个结点，刚好，给的内存是64Mb，完全可以使用数组模拟树，注意该题的二叉搜索树是左子树大、右子树小。构建完树之后就可以使用队列进行层序遍历了。

Code Segment：


#include&lt;cstdio&gt;
#include&lt;algorithm&gt;
#include&lt;queue&gt;
using namespace std;
int a[1058576];//数组开]]></description><category></category></item></channel></rss>