摘要: 典型的树上求两点间距离最大值,lca的做法 这题要求同一个阵营,不妨先将同属一个阵营的先存进数组,之后每组进行比较 比较时取出深度最深的,因为这个一定是答案中两点中的其中一个答案,这是树的性质,不妨可以想一想 #include<bits/stdc++.h> using namespace std; 阅读全文
posted @ 2020-05-04 20:03 朝暮不思 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 这题和最短路计数差不多,只是多了个次短路判断,其实也是跟最短路一样是满足拓扑序的,也就是说不可能出队之后绕一个环回来次短路还变化了 因此也可以用迪杰斯特拉这种天然满足拓扑序的进行更新,只不过需要注意一下最短路和次短路的变化 #include<bits/stdc++.h> using namespac 阅读全文
posted @ 2020-05-04 19:04 朝暮不思 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 将括号拆掉其实就是维护两个求和 任取一个作为根节点,做两次dfs 考虑使用贡献来更新答案 而第二次dfs考虑这条边权的影响 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+10; c 阅读全文
posted @ 2020-05-04 18:28 朝暮不思 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 用单调栈来维护,并且维护两个数组,一个是某数现存的个数,一个是这个数是否已经在栈中 如果已在栈中,就不能操作,并且把个数--,因为如果这样操作,就会出现一个问题。 题目告诉我们每个数必须出现一次,举个例子 现在是 1 3 1 4 3 2,这样的序列 刚开始是1 3 ,如果我们操作1 ,因为3的数可以 阅读全文
posted @ 2020-05-04 14:35 朝暮不思 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 这题是单点修改和区间查询,因此想到用线段树求,问题是里面的因子个数的维护 显然不可能是先算出来再分解因子,因此我们想到唯一分解定理,也就是所有数都是某些质因数的倍数的乘积 并且每个数不超过10,10里面质数只有2 3 5 7 9,因此只需要维护这些值就行了,因此因数个数就是这个质因数的指数+1的乘积 阅读全文
posted @ 2020-05-04 08:50 朝暮不思 阅读(171) 评论(0) 推荐(0) 编辑