关闭
当前搜索:

bzoj 4756: [Usaco2017 Jan]Promotion Counting

→题目链接← 【想说的话】 没有写过树状数组... 这算是我 树状数组初体验 ? 【题解】 先按能力值从大到小排序,然后找到每个牛的名次 之后一边dfs,一边用树状数组统计 【代码】 #include #define MAXN 100010 using namespace std; inline int rd(){ int x=0,y=1;char ...
阅读(52) 评论(0)

bzoj 4094: [Usaco2013 Dec]Optimal Milking 线段树

→题目链接← 【想说的话】 再次手误... 【题解】 对于每个区间维护四种最大值 1、选左端点不选右端点 2、选右端点不选左端点 3、两个端点都选 4、两个端点都不选 然后用线段树搞一搞就好了 注意下pushup的转移 【代码】 #include #define MAXN 40040 typedef long long ll; using na...
阅读(42) 评论(0)

bzoj 1782: [Usaco2010 Feb]slowdown 慢慢游

→题目链接← 【想说的话】 总是因为一些手误导致调半天... 【题解】 按dfs序建线段树,然后每次先单点查询再区间加1 【代码】 #include #define inf 1000000000 #define MAXN 100010 using namespace std; inline int rd(){ int x=0,y=1;char c=get...
阅读(48) 评论(0)

bzoj 3391: [Usaco2004 Dec]Tree Cutting网络破坏

→题目链接← 【想说的话】 果然我还是比较喜欢树 【题解】...
阅读(39) 评论(0)

bzoj 3372: [Usaco2004 Feb]Moo University -- Financial Aid 财政补助 二分

→题目链接← 【想说的话】 期中考试gg了,,, 写发水题压压惊 【题解】 用两个数组,一个按分数从小到大排序,一个按价格从小到大排序 在按分数排序的数组上进行二分,把它当作中位数,然后在另一个数组中扫一遍找到两边的数,判断是否合法 复杂度O(nlogn) 【代码】 #include #define MAXN 100010 using namespac...
阅读(54) 评论(0)

bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会

→题目链接← 【想说的话】 没有什么想说的=.= 周末没什么事不刷题感觉不太好 【题解】 两遍dfs(树形dp) 将点1当作根 第一遍dfs计算出每个点子节点总数,还有将它作为集会地点时它的子树中的点满足条件需要的代价 第二遍计算出答案,点1的答案就是dfs1时处理出的代价,剩下的点的答案就对于它与它父亲节点的那条边计算一下就好 具体看代码吧 【代码】 ...
阅读(69) 评论(0)

bzoj 3364: [Usaco2004 Feb]Distance Queries 距离咨询 LCA

→题目链接← 【想说的话】 TLE了3遍后我深刻的认识到了.... 跑最短路果然不可行... 【题解】 显然是裸的LCA 【代码】 #include #include #include #include using namespace std; struct node{ int to,len; node(int x,int y){to=x,len=...
阅读(65) 评论(0)

bzoj 3363: [Usaco2004 Feb]Cow Marathon 奶牛马拉松 树的直径

→题目链接← 【想说的话】 一开始以为还要像前面一题那样搞带权并查集 然后我就不会了... 后来突然发现我zz了 最后一个方向没用了...直接建双向边然后跑树的直径就行了... 幸亏这个题保证边不交叉,要不然就彻底不会了 【题解】 建双向边然后跑树的直径 找树的直径:随便从一个点跑bfs,找到距离它最远的那个点,再从那个点跑bfs,最长路就是树的直径 ...
阅读(71) 评论(0)

bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 带权并查集

→题目链接← 【想说的话】 一道带权并查集好(水)题 以前觉得带权并查集挺屌的... 但是写过才发现就是正常的并查集顺便维护点什么东西... 好像我写的有点暴力啊...跑的好慢啊 【题解】 做并查集的过程中找根时不做路径压缩 然后对于每个点保存它到它的父亲节点需要在x轴和y轴上移动多少 每次合并x、y时找到y的根并记录从y移动到跟需要在x轴和y轴上移动多少 然后...
阅读(73) 评论(1)

bzoj 1230: [Usaco2008 Nov]lites 开关灯

→题目链接← 正解是线段树... 然而暴力能过为什么要费劲呢=.= 代码: #include #include #include #include #include using namespace std; bool f[100010]; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=0...
阅读(68) 评论(0)

bzoj 1232: [Usaco2008Nov]安慰奶牛cheer

→题目链接← 读题就可以看出肯定用最小生成树 只按照边权找到最小生成树后,计算最后的时间是 Σ边权*2+Σ点权*出度+我们要选的过夜的点的权值 然后发现,如果只按照边权找最小生成树是不正确的 因为我们正常跑kruskal的时候每次会将边权*2+两边点的点权加进答案 所以我们可以在排序前把每条边两边点的点权都加进这个边权之中,并且把原边权*2 这样再跑kruskal就每...
阅读(65) 评论(0)

bzoj 3368: [Usaco2004]Farmer John's View 约翰看山

→题目链接← 我觉得这个题主要就是要处理好每个山的边界问题 对于横跨0°的要特殊处理 我是把它拆成两段,最后一定是每个山的端点都是秒数从小到大的 然后以左端点从小到大排序,再乱搞一搞统计答案就好了,具体看代码吧 代码: #include #include #include #define inf 180*60*60 using namespace std; str...
阅读(81) 评论(0)

bzoj 3359: [Usaco2004 Jan]矩形

→题目链接← 先令所有的矩形的x,y都是x 再以x为第一关键字,y为第二关键字,从小到大排序 然后就变成了找一个二维的最长上升子序列 n *注意两个矩形全等不算包含 代码: #include #include #include #include #include using namespace std; struct node{ int x,y; friend...
阅读(80) 评论(0)

bzoj 3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四

→题目链接← 一眼最短路 但是建边是问题,n^2建边一定是不可行的 所以我们以高度为关键字排下序,然后对于每个点,只需要向两边扫,能建边就建边,直到高度相差超过2 注意:建边要建双向边 代码: #include #include #include #include #include #define inf 23333333 using namespace std; ...
阅读(84) 评论(0)

bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二

→题目链接← 裸线段树 查询最小值 代码: #include #include #include using namespace std; struct node{ int l,r,Min; }tree[30000*4]; void build(int num,int l,int r){ tree[num].l=l; tree[num].r=r; if(l==...
阅读(74) 评论(0)
70条 共5页1 2 3 4 5 ... 下一页 尾页
    -广告-
    一个极其温馨的提示
    个人资料
    • 访问:48794次
    • 积分:1745
    • 等级:
    • 排名:千里之外
    • 原创:127篇
    • 转载:1篇
    • 译文:0篇
    • 评论:23条
    最新评论