- 博客(4)
- 收藏
- 关注
原创 力扣(leetcode)#1579 保证图可完全遍历(#4)
题目 原题链接:力扣(LeetCode)#1579 解析 还是并查集。。说实话,要做吐了。 本人的思想是维护两个连通集合Alice和Bob,一人一个。 关键点在于要进行两轮循环,首先判断公共边,如果公共边多了,就增加可以减去的边数。 第二轮循环进行独有边的判断。 考虑一下,两个顶点之间存在三种类型的边,并且该边不能全部省略,那么减去Alice和Bob两条独占边显然是最合算的。 代码 class Solution { private: int cnt1,cnt2,rest1,rest2; in
2021-01-27 18:02:52 104
原创 力扣(leetcode)#959 由斜杠划分区域(#3)
题目 原题链接:力扣(LeetCode)#1319 解析 依然是并查集维护连通分量的问题,本题主要难点在于如何划分连通分量。 将每一个1*1的小方格都按照这个模式进行划分: 如果grid[i][j]=‘\\’,那么是1和2进行合并,0和3进行合并 如果grid[i][j]=‘/’,那么是0和1进行合并,2和3进行合并 如果grid[i][j]=‘ ’,那么是0,1,2,3合并 上面是三种内部合并的情况讨论。 接下来讨论小方格之间的合并问题: 对于2号区域可以和右边一个小方格的0号区域进行合并 对于3
2021-01-25 17:28:13 145 1
原创 力扣(leetcode)#1319 连通网络的操作次数(#2)
题目 原题链接:力扣(LeetCode)#1319 解析 并查集模板题。 需要注意的是N个连通分量,至少需要N-1条边进行连接。 最开始将每个节点视为一个连通分量,如果进行了合并就将连通分量的数量减少一个,否则继续判断。当遍历完connections的时候,如果还剩余K个连通分量,那么至少还需要K-1条边,K-1也就是答案。 代码(含注释) class Solution { //n个连通分量至少需要n-1条线 private: int *a; int cnt;//当前剩余连接的电脑数
2021-01-24 09:38:42 167
原创 力扣(leetcode)#1584 连接所有点的最小费用(#1)
力扣(leetcode)#1584 连接所有点的最小费用(#1) 题目 原题链接:力扣(LeetCode)#1584 解析 利用Kruskal 算法生成最小生成树,利用并查集,路径压缩等知识。 代码(含注释) class Solution { private: int n;//点的个数 struct edge { int s,e;//开始和结束的点 int w;//权重 }; edge e[1000005];//数组要开大些,不然会爆
2021-01-19 21:27:09 217
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人