原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=1664

可以发现的是,如果参加了节日\(i\)之后可以参加节日\(j\),当且仅当\(i\)节日的结束时间\(l[i]\)小于等于\(j\)节日的开始时间\(t[j]\)。那么我们对于每个\(i\),可以从\(i\)出发向每个合法的\(j\)连一条边,表示参加完\(i\)之后可以接着参加\(j\)。

题目要求最多参加几场节日,那么我们设边权为1,在我们建出的\(DAG\)上算出最长路的长度就是答案。那么我们可以建一个超级源,用拓扑排序进行\(dp\)。

建图的时间复杂度最坏为\(O(\frac{N(N-1)}{2})\),图的规模也是\(\frac{N(N-1)}{2}\),所以拓扑排序的复杂度和建图一致。

不过我们可以整一个玄学优化:我们可以不用对于每个\(i\)都枚举完\(1\)~\(n\)所有节日。我们先把节日按照开始时间\(t\)从小到大进行排序,然后对于第\(i\)个节日,我们二分查找第一个开始时间大于等于\(i\)的结束时间的节日\(j\),那么我们把\(i\)连向\(j\)~\(n\)即可。这样一般就不用枚举完1~n所有数。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#define maxn 10010
using namespace std;inline int read(){register int x(0),f(1); register char c(getchar());while(c<'0'||'9'<c){ if(c=='-') f=-1; c=getchar(); }while('0'<=c&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}struct node{ int t,l,id; }a[maxn];
vector<int> to[maxn];
int n,tmp[maxn];
int ind[maxn],dp[maxn],ans;inline bool cmp(const node &x,const node &y){ return x.t<y.t; }inline int binary(const int &val){if(a[n].t<val) return -1;int l=1,r=n,mid;while(l<r){mid=l+r>>1;if(a[mid].t<val) l=mid+1;else r=mid;}return l;
}queue<int> q;
inline void topo(){q.push(0),dp[0]=0;while(q.size()){int u=q.front(); q.pop();for(register int i=0;i<to[u].size();i++){int v=to[u][i];dp[v]=max(dp[v],dp[u]+1),ind[v]--;if(!ind[v]) q.push(v);}}
}int main(){n=read();for(register int i=1;i<=n;i++) a[i].t=read(),a[i].l=read(),a[i].id=i;sort(a+1,a+1+n,cmp);for(register int i=1;i<=n;i++){int end=a[i].l+a[i].t;int j=binary(end);if(j==-1) continue;for(register int k=j;k<=n;k++){to[a[i].id].push_back(a[k].id),ind[a[k].id]++;}}for(register int i=1;i<=n;i++) to[0].push_back(i),ind[i]++;topo();for(register int i=1;i<=n;i++) ans=max(ans,dp[i]);printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/akura/p/11309779.html

[Usaco2006 Open]County Fair Events 参加节日庆祝相关推荐

  1. BZOJ 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝( dp )

    先按时间排序( 开始结束都可以 ) , 然后 dp( i ) = max( dp( i ) , dp( j ) + 1 ) ( j < i && 节日 j 结束时间在节日 i 开 ...

  2. bzoj 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝(DP)

    1664: [Usaco2006 Open]County Fair Events 参加节日庆祝 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 456   ...

  3. bzoj 1664 (贪心)

    [Usaco2006 Open]County Fair Events 参加节日庆祝 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 487  Solved ...

  4. bzoj 1665: [Usaco2006 Open]The Climbing Wall 攀岩(最短路)

    1665: [Usaco2006 Open]The Climbing Wall 攀岩 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 378  Solve ...

  5. BZOJ1665 Usaco2006 Open The Climbing Wall

    1665: [Usaco2006 Open]The Climbing Wall 攀岩 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 407  Solve ...

  6. bzoj 1663: [Usaco2006 Open]赶集(最长路)

    1663: [Usaco2006 Open]赶集 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 384  Solved: 217 [Submit][St ...

  7. 【BZOJ】1665: [Usaco2006 Open]The Climbing Wall 攀岩(spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1665 这题只要注意到"所有的落脚点至少相距300"就可以大胆的暴力了. 对于每个 ...

  8. 商家怎样通过H5游戏进行节日营销

    现在有很多节日促销是通过微信H5游戏来完成的,很多企业商家抓住节假日的时间点作为营销的时机,借助游戏形式来展开营销活动,H5小游戏的种类很多,那么商家怎么通过微信H5小游戏来完成节日出校具体活动呢?七 ...

  9. 世界各地庆祝玛雅历法“新纪元”开始

    当地时间2012年12月21日,墨西哥,当地举行仪式庆祝玛雅历法中新时代的开始. 当地时间2012年12月21日,玻利维亚的的喀喀湖,数百名当地人与玻利维亚总统埃沃·莫拉莱斯参加玛雅仪式,庆祝玛雅周期 ...

最新文章

  1. 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务
  2. 推荐算法炼丹笔记:电商搜索推荐业务词汇表
  3. SAP Fiori OData取数据的同步模式和异步模式比较
  4. android linearllayout 隐藏 动画,AnimatedLinearLayout:带删除动画的LinearLayout
  5. Android之使用getIdentifier()获取资源Id
  6. Redis缓存安装Version5.0.7
  7. Python 机器学习 随机森林 天气最高温度预测任务(三)
  8. CentOS 7.6 RPM方式安装Oracle19c的过程
  9. 熬了几个大夜,学完一套985博士总结的Pytorch学习笔记(20G高清/PPT/代码)
  10. SpringBoot文档翻译系列——26.日志logging
  11. 金店管理系统的几个经验和教训
  12. protel99se的封装库
  13. C++和ASM文件的互相调用
  14. 《明朝那些事儿》读后感
  15. SpringBoot集成Shiro管理会话和权限
  16. 【Mybatis-Plus】【异常】Inferred type ‘E‘ for type parameter ‘E‘ is not within its bound;
  17. 启中教育:淘宝最有效的投诉电话号码?
  18. 2022群发邮件软件有哪些?哪个好用呢?解读如何大量群发邮件及单显功能
  19. CopyFile复制单个文件和复制指定路径下所有文件
  20. 【教程】Hexo+Coding搭建自己的博客网站系列5-Next6.7版本主题深度美化

热门文章

  1. 一个没有经验的前端工程师,写CSS的时候有什么常见通病?
  2. 你们学习前端都是靠自学吗?
  3. 泛型:了解泛型与通配符
  4. (python)7-6 sdut-数制转换
  5. 打开特定的网站特别慢_网站建设的注意事项
  6. 更改主机名后mysql无法启动_主机名变更导致MySql启动失败
  7. jsonarray转化list对象_第8篇:Cython的面向对象--Python类 vs Cython扩展类
  8. python相关性分析特征过滤_Python相关性分析
  9. 自定义关键字_Java中的自定义异常
  10. 单片机ADC采样算法----限幅滤波法