STL
当想要维护一个数组,其中的元素要求有序,同时可能随时对这个数组中的元素进行增减
有没有一个STL可以快速维护一个这样的数组?
multiset(平衡二叉树)
默认从小到大排序
注意离散化中清除重复元素的原理:
unique()函数
vector中的earse是删除指定一段,所以离散化有:
《树的直径》
什么是树的直径?
在一颗树上,两个叶子节点之间的最长距离下的路径
证明方式<------
如何dfs?
void dfs(int node,int fa) { if (maxL<deep[node]) d=node,maxL=deep[node]; for (int i=0;i<sides[node].size();i++) { int child=sides[node][i]; if (child==fa) continue; deep[child]=deep[node]+1; road[child]=node; dfs(child,node); } }
d为我们要求的端点,每一次只要深度有更深的点我们就更新
如何用拓扑排序的方式将叶子节点一圈一圈地给“减掉”?
双队列的方式,其中有个十分神奇的用法:
queue<int>q1,q2;
swap(q1,q2);
没想到swap可以直接交换队列
while (sum) { if (sum<=k) break; ans++; while (q1.size()) { int node=q1.front(); q1.pop(); sum--; for (int i=0;i<sides[node].size();i++) { int next=sides[node][i]; if (du[next]<=1) continue; du[next]--; if (du[next]==1) q2.push(next); } } swap(q1,q2); }
标签:----,图论,q2,sum,dfs,蓝桥,swap,数组 From: https://www.cnblogs.com/cilinmengye/p/17450527.html