
优先队列、堆
Mr.Gzj
这个作者很懒,什么都没留下…
展开
-
P1631 序列合并(优先队列、堆)
思路:a,b都是有序的,所以可以用小顶堆来存取数,先对a[0]+b[i]放进优先队列里,然后每次取出数时,查看取出数是由a几和b[i]相加的,然后将b的下一个元素加进去。 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 1; int n, a[N], b[N], t[N]; priority_que...原创 2019-04-15 19:50:55 · 291 阅读 · 0 评论 -
P1484 种树
思路:dp很容易想到,dp[i][j]表示种到第i棵树且种了j棵的最大获利,dp[i][j]=max(dp[i-1][j],dp[i-2][j-1]+a[i]) 有这样一种思路:对于n个数中最大值a[i]>0,假设它两边都有数,我们可以想到,在k=1的时候,结果为a[i];而在k=2时,要么a[i-1]和a[i+1]同时被选(即a[i-1]+a[i+1]>a[i]),要么同时放弃(即...原创 2019-04-15 22:22:33 · 205 阅读 · 0 评论 -
2019ccpc网络赛1004path
题意:给出一个有向加权图,再给出k次询问,每次询问这个图中所有路径的第k小值。 思路:用优先队列,队列里对路径权值从小到大排序,记录节点的父亲节点,本节点,权值,id(本节点是通过父亲节点的第id小的边扩展到的·),每次扩展本节点的最小边和上一节点的id+1小边。之所以这样扩展是为了防止菊花图这种所有节点都连在同一节点的情况。 #include <bits/stdc++.h> #...原创 2019-08-24 14:38:45 · 277 阅读 · 0 评论