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);
}