jzoj1295,P1607-轻轨(庙会班车)【贪心,线段树】

前言

我考试时敲了一个不仅比正解编程复杂度高,而且时间更慢,还AC不了的费用流

垃圾代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define MN 20011
using namespace std;
struct node{int to,w,next,c;
}a[150001];
queue<int> q;
int tot,k,n,c,s,e,x,y,w,sum;
int ls[MN],maxf[MN],b[MN],f[MN],v[MN];
void addl(int x,int y,int w,int c)
{a[++tot].to=y;a[tot].w=w;a[tot].next=ls[x];ls[x]=tot;a[tot].c=c;a[++tot].to=x;a[tot].w=0;a[tot].next=ls[y];ls[y]=tot;a[tot].c=-c;
}
bool spfa()
{memset(f,-127/3,sizeof(f));while (!q.empty()) q.pop();q.push(s);v[s]=true;f[s]=0;maxf[s]=2147483647;while (!q.empty()){int x=q.front();v[x]=false;q.pop();for (int i=ls[x];i;i=a[i].next){int y=a[i].to;if (a[i].w&&f[x]+a[i].c>f[y]){f[y]=f[x]+a[i].c;maxf[y]=min(maxf[x],a[i].w);b[y]=i;if (!v[y]){q.push(y);v[y]=true;}}}}if (f[e]>-690563370) return true;else return false;
}
int updata()
{x=e;int ans=0;while (x!=s){a[b[x]].w-=maxf[e];a[b[x]^1].w+=maxf[e];ans+=a[b[x]].c;x=a[b[x]^1].to;}return ans*maxf[e];
}
int main()
{tot=1;scanf("%d%d%d",&k,&n,&c);s=n+1;e=s+1;addl(s,1,c,0);addl(n,e,c,0);for (int i=1;i<n;i++) addl(i,i+1,c,0);for (int i=1;i<=k;i++){scanf("%d%d%d",&x,&y,&w);addl(x,y,w,1);}while (spfa()) sum+=updata();printf("%d",sum); 
}
//If you want to AK(IOI)!
//first:
//     AK        |      AK IOI
//sto         orz|sto         orz
//sto         orz|sto         orz
//sto   xjq   orz|sto   hzb   orz
//sto         orz|sto         orz
//sto         orz|sto         orz
//Then you will AK(IOI)!
//不要问我为啥会有上面的东西

大意

一个列车可以坐CC头牛,有K组牛,每组mimi个,从sisi出发到eiei。求最多可以带多少头牛。


解题思路

首先众所周知可以用数学归纳法证明每次选取结束时间最早的是最优解
自己理解的证明:
选结束时间晚的只有两种情况

1.
这里写图片描述
这种情况绿色比红色占的范围更大,肯定不一定最优解。


2.
这里写图片描述
这种情况由于被红色线段占了的已经计算过了,如果计算红色的话那么前面的一定没有被红色覆盖,所以按照这么算其实就是这样
这里写图片描述
这样的话绿色占的范围依旧比红色大,所以依旧不一定是最优解。

好了,证明完了之后就可以先按照结束位置排个序,用(i,i)(i,i)这个区间来表示在ii<script type="math/tex" id="MathJax-Element-238">i</script>这个时间点车子计算到现在空闲的容量,然后枚举将每个开始到结束区间尽量减到0(能减就减,当然注意这个组的人数)


代码

#include<cstdio>
#include<algorithm>
using namespace std;
struct node{int star,end,w;
}w[50001];
struct treenode{int l,r,w,lazy;
}a[80001];
int k,n,c,s;
void build(int x,int l,int r,int num)
{a[x].l=l;a[x].r=r;a[x].w=num;if (l==r) return;int mid=(l+r)/2;build(x*2,l,mid,num);build(x*2+1,mid+1,r,num);
}
void ddata(int x)
{if (a[x].lazy){a[x*2].w+=a[x].lazy;a[x*2+1].w+=a[x].lazy;a[x*2].lazy+=a[x].lazy;a[x*2+1].lazy+=a[x].lazy;a[x].lazy=0;}
}
void updata(int x,int l,int r,int num)
{if (a[x].l==l&&a[x].r==r){a[x].w+=num;a[x].lazy+=num;return;}ddata(x);if (a[x*2].r>=r) updata(x*2,l,r,num);else if (a[x*2+1].l<=l) updata(x*2+1,l,r,num);else updata(x*2,l,a[x*2].r,num),updata(x*2+1,a[x*2+1].l,r,num);a[x].w=min(a[x*2].w,a[x*2+1].w);
}
int find(int x,int l,int r)
{if (a[x].l==l&&a[x].r==r)return a[x].w;ddata(x);if (a[x*2].r>=r) return find(x*2,l,r);else if (a[x*2+1].l<=l) return find(x*2+1,l,r);else{ a[x].w=min(a[x*2].w,a[x*2+1].w);return min(find(x*2,l,a[x*2].r),find(x*2+1,a[x*2+1].l,r));}
}
bool cmp(node x,node y)
{return x.end<y.end;
}
int main()
{scanf("%d%d%d",&k,&n,&c); for (int i=1;i<=k;i++){scanf("%d%d%d",&w[i].star,&w[i].end,&w[i].w);}build(1,1,n,c);//建树sort(w+1,w+1+k,cmp);//排序for (int i=1;i<=k;i++){int h=find(1,w[i].star,w[i].end-1);if (h)//是否可以接牛{updata(1,w[i].star,w[i].end-1,-min(h,w[i].w));//修改区间s+=min(h,w[i].w);//累计答案}}printf("%d",s);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章了解RPC框架原理

转载自 一篇文章了解RPC框架原理 1.RPC框架的概念 RPC&#xff08;Remote Procedure Call&#xff09;–远程过程调用&#xff0c;通过网络通信调用不同的服务&#xff0c;共同支撑一个软件系统&#xff0c;微服务实现的基石技术。使用RPC可以解耦系统&#xff0c;方便维护…

winform分页案例简单实现方式~

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。最近&#xff0c;四班在做KTV点歌系统&#xff0c;正好需要用到分页的内容&#xff0c;所以今天我就整理整理&#xff0c;写了一个简易的winfrom分页案例&#xff0c;以下是案例截图&#…

.Net Core下通过Proxy 模式 使用 WCF

.NET Core下的WCF客户端也是开源的&#xff0c;这次发布.NET Core 2.0,同时也发布了 WCF for .NET Core 2.0.0, 本文介绍在.NET Core下如何通过Proxy 消费WCF服务。 我们现在直接可以在 standard 2.0下调用wcf服务了&#xff0c;不过 Microsoft WCF Web Service Reference Pro…

JWT 入门

文章目录使用JWT的原因JWT结构JWT入门案例Token拦截使用JWT的原因 为了保护项目之中的数据资源&#xff0c;那么一定就需要采用认证检测机制&#xff0c;于是SpringCloud进行认证处理&#xff0c;就可以使用SpringSecurity 来实现了&#xff0c;但是如果你真的去使用了SpringSe…

当你左右看看没有发现我时,千万千万别往看……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。周五&#xff0c;又是一个考试的周五&#xff0c;因为本周都在做项目&#xff0c;还以为同学们没有好好的备考&#xff0c;估计考的不好&#xff0c;没想到今天测试的结果是自从考试以来最…

2018/7/11-纪中某C组题【jzoj1293,jzoj1294,jzoj1295】

前言 今天C组题目有毒&#xff0c;第一题题目玄学&#xff0c;第二题就是不会&#xff0c;第三题考的贼偏。fw(hjw&#xff0c;his博客&#xff1a;https://blog.csdn.net/gx_man_vip)说今天B组题目还行早知道就去做B组了qwq 今日分数 去掉了十分强大的纪中dalao 正题 T1&…

关系型数据库的分片原则

来自Citus的Ozgun Erdogan分享了进行数据库分片的三个原则&#xff0c;并强调应用类型是决定数据库分片最主要的因素。其中B2B类型的应用最容易进行数据库分片。 在数据库很小的时候&#xff0c;可以很容易地通过添加硬件来扩展数据库。但随着数据表数量的不断增长&#xff0c…

分布式架构--基本思想汇总

转载自 分布式架构&#xff0d;&#xff0d;基本思想汇总 在互联网大行其道的今天&#xff0c;各种分布式系统已经司空见惯。搜索引擎、电商网站、微博、微信、O2O平台。。凡是涉及到大规模用户、高并发访问的&#xff0c;无一不是分布式。 关于分布式系统&#xff0c;并没有…

花了100多去KTV不是唱歌,竟然是……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。老师&#xff0c;歌词可以实现&#xff0c;不过比较麻烦~也还行你这样 准备几首歌的歌词就行到时候只演示这几首歌如果是其他的哥的话&#xff0c;就显示暂无歌词行&#xff0c;有时间就试…

jzoj4272-序章-弗兰德的秘密【树形dp】

正题 大意 两棵树&#xff0c;它们的相似值是它们留下最多的节点使它们的结构相同。求相似值。 这两颗树就是结构相同的&#xff0c;相似值是8。 解题思路 就是树形dp。可以用f[i][j]f[i][j]表示树1的第ii号节点和它的子树与树2的j" role="presentation" s…

从NIO到Netty开发

转载自 从NIO到Netty开发 1. 从传统BIO到NIO的升级 Client/Server模型是网络编程的基本模型&#xff0c;服务端提供位置信息&#xff0c;客户端通过连接操作向服务端发起连接请求&#xff0c;通过三次握手建立连接&#xff0c;如果连接建立成功&#xff0c;双方就可以通过网…

Orleans入门例子

Orleans是微软开源的分布式actor模型框架.actor模型的原理网络上有很多文章.有许多理论性的文章,深刻地我都不知道怎么应用.在这里我就不赘述了.既然是博客,就说说自己的理解。 对于编程来说&#xff0c;不管是前台还是后台&#xff0c;在现在的计算机环境下&#xff0c;多线程…

JavaScript常用单词整理总结

第一章object对象undefined未定义变量boolean布尔类型sort()对数组排序charAt返回在指定位置的字符toLowerCase()把字符串转换为小写button按钮break结束循环toUpperCase()把字符串转换为大写split(str)将字符串分割为字符串数组length获取数组的长度continue结束当前循环&…

JWT 应用

文章目录JWT工具模块Token认证微服务JWT授权监测网关认证过滤消费端获取JWTJWT工具模块 如果要想在项目之中去使用JWT技术&#xff0c;那么就必须结合到已有的模块之中,最佳的做法就是将JWT的相关的处理 操作做为一个自动的starter组件进行接入 1、【microcloud项目】既然要开…

淘宝秒杀系统设计的几个注意点

转载自 淘宝秒杀系统设计的几个注意点 还记得2013年的小米秒杀吗&#xff1f;三款小米手机各11万台开卖&#xff0c;走的都是大秒系统&#xff0c;3分钟后成为双十一第一家也是最快破亿的旗舰店。经过日志统计&#xff0c;前端系统双11峰值有效请求约60w以上的QPS &#xff0…

.NET Core 2.0 开源Office组件 NPOI

前言 去年 12 月&#xff0c;我移植了大家所熟知 NPOI 到 .NET Core 版本&#xff0c;这里是当时发的博客&#xff0c;当时得到了很多同学的支持&#xff0c;社区反应也很好&#xff0c;在这里非常感谢当时推荐的朋友们。 去年的那个版本是针对于 .NET Core 1.0 的&#xff0…

老师们一直在……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。【随便写写】为了了解同学们在公司的情况&#xff0c;和佟老师上了的做了个在线问卷调查&#xff0c;把一些常见的问题设置在调查中&#xff0c;根据调查数据&#xff0c;然后挨个的去解决…

海量数据的分库分表技术演进,最佳实践

转载自 海量数据的分库分表技术演进&#xff0c;最佳实践 每个优秀的程序员和架构师都应该掌握分库分表&#xff0c;移动互联网时代&#xff0c;海量的用户每天产生海量的数量 用户表订单表交易流水表 以支付宝用户为例&#xff0c;8亿&#xff1b;微信用户更是10亿。订单表…

Orleans例子再进一步

步骤 现在我想再添加一个方法,到IGrains项目内,这个方法里面有个延迟3秒,然后返回一个Task<string>.就叫做DelayedMsg吧,如下图所示: 我调用了这个DelayedMsg,同时又调用了SayHello函数,看看效果:注意这个DelayedMsg的调用方法没有await. 虽然我的SayHello的调用时间紧随…

2018/7/12-纪中某C组题【jzoj4272,jzoj4273,jzoj4274】

前言 今天我的想法都是正解&#xff0c;也都写了&#xff0c;结果才160QwQ 今日分数 去掉了十分强大的纪中dalao 正题 T1&#xff1a;jzoj4272-序章-弗兰德的秘密【树形dp】 博客链接&#xff1a;https://blog.csdn.net/mr_wuyongcong/article/details/81021994 T2&#xf…