bzoj1150
来源:互联网 发布:理想禁区 知乎 编辑:程序博客网 时间:2024/06/18 14:26
贪心好题
每个城市一定是和相邻两个城市中的一个连边
注意到可以将数组差分
然后转化成从n-1条边中选k条且任意两条不相邻
开一个堆
每次选其中边权最小的
然后我们考虑贪心最巧妙的反悔操作
如果这个点被选了那么将这个点前一个点和后一个点删去(不能再选),然后向堆中加入权值为dis【pre【x】】+dis【next【x】】-dis【x】的点,如果选了这个点相当于选旁边的两个点而不选这个点,而由于旁边的两个点都已经删去不会重复
注意边界
#include<cstdio>#include<cstring>#include<utility>#include<algorithm>#include<iostream>#include<queue>#include<stack>#include<cmath>#include<cstdlib>#include<ctime>const int inf = 1300000000;using namespace std;inline int read(){ char ch='*'; int f=1; while(!isdigit(ch=getchar())) if(ch=='-') f=-1; int num=ch-'0'; while(isdigit(ch=getchar())) num=num*10+ch-'0'; return num*f;}const int maxn = 150005;int pre[maxn<<1],nxt[maxn<<1],vis[maxn<<1];int a[maxn<<1],n,k;priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点//假如……我是说假如喔。假如是 Picks 出题,其他人能不能对我温柔一点int main(){ n=read();k=read(); int x,y; x=read(); for(register int i=2;i<=n;i++) { y=read(); a[i]=y-x;x=y; q.push(make_pair(a[i],i)); //cerr<<a[i]<<"--"<<i<<endl; pre[i]=i-1;nxt[i]=i+1; } long long ans=0; int cnt=n; pre[2]=nxt[n]=0; while(k--) { //cerr<<"delete "<<q.top().second<<endl; while(q.top().first!=a[q.top().second]) {q.pop();} int pos=q.top().second;q.pop();//cerr<<a[pos]<<"--"<<pos<<"--"<<pre[pos]<<"---"<<nxt[pos]<<"--"<<a[pre[pos]]+a[nxt[pos]]-a[pos]<<endl; ans+=a[pos]; if(pre[pos]&&nxt[pos]) a[pos]=a[pre[pos]]+a[nxt[pos]]-a[pos];else a[pos]=inf; a[pre[pos]]=a[nxt[pos]]=inf; pre[nxt[nxt[pos]]]=pos; nxt[pre[pre[pos]]]=pos; pre[pos]=pre[pre[pos]]; nxt[pos]=nxt[nxt[pos]]; q.push(make_pair(a[pos],pos)); //for(register int i=2;i<=n;i++) cerr<<a[i]<<" "; //cerr<<endl; } cout<<ans<<endl; return 0;}
阅读全文
0 0
- bzoj1150
- Review-堆(Bzoj1150)
- BZOJ1150 数据备份
- 【CTSC2007】bzoj1150 数据备份
- [BZOJ1150][CTSC2007]数据备份Backup
- 【bzoj1150】【CSTC2007】【数据备份】【贪心】
- bzoj1150: [CTSC2007]数据备份Backup
- 【BZOJ1150】[CTSC2007]数据备份Backup
- BZOJ1150: [CTSC2007]数据备份Backup
- bzoj1150 [CTSC2007]数据备份Backup
- bzoj1150: [CTSC2007]数据备份Backup
- 【bzoj1150】[CTSC2007]数据备份Backup
- bzoj1150 [CTSC2007]数据备份Backup
- bzoj1150: [CTSC2007]数据备份Backup 贪心
- [贪心+堆] BZOJ1150: [CTSC2007]数据备份Backup
- 【堆+贪心】BZOJ1150 [CTSC2007]数据备份Backup
- [bzoj1150][堆][贪心][CTSC2007]数据备份Backup
- 【贪心+堆+链表】BZOJ1150(CTSC2007)[数据备份Backup]题解
- 欢迎使用CSDN-markdown编辑器
- JZOJ 5464 乘积
- centos7.2 grafana的安装与简单使用
- [视频处理]自译的ffmpeg ./configure参数
- Rank Scores
- bzoj1150
- Java内存溢出
- 曲线拟合
- Oracle 联机重做日志文件(ONLINE LOG FILE)
- spring @Repository 和@Service,@Controller使用方法
- systemctl添加mysql服务
- 图形用户界面
- Android的onCreateOptionsMenu()创建菜单Menu
- 各种焦点图轮播