2017.5.9 运输计划 失败总结
这个题检验的方法没想到、、主要是很长时间没接触差分了、、
看来树上的问题主要优化点就是 求路径时差分、倍增、、、
所以有些题不一定是异常巧妙的方法,有时只是一些工具套路、、、
检验的方式当然是 求出那一条边来,,如果去掉这一条边,所有大于答案的都需要去掉,所以检验就变成了大于答案的边是否都经过这一条边
另外由于tarjan的大常数和大空间,所以被成功卡常至95
被卡的码:
#include<iostream>
#include<cstdio>
using namespace std;
#define N 300005
#define M 600005
#include<cstring>
#include<algorithm>
int hou[M],xia[N],zhi[M],zhong[M],i,j,fu[N],l,r,ans,shen[N],fir[N],jilu[N],dis[N],tong[N],f[M][22][2],m,mid,woc,loge[M],lca,n,x,y,z;
int tot=-1;
struct car
{
int x,y,jl,lca;
}che[2000005];
bool cmp(car a,car b)
{return a.jl>b.jl;
}
void jia(int a,int b,int c)
{hou[++tot]=xia[a],xia[a]=tot,zhong[tot]=b,zhi[tot]=c;//hou[++tot]=xia[b],xia[a]=tot,zhong[tot]=b,zhi[tot]=c;
}
void dfs(int now,int fa,int d)
{fu[now]=fa;shen[now]=d;fir[now]=++tot;f[tot][0][0]=d;f[tot][0][1]=now;//dui[tot]=now;for(int i=xia[now];~i;i=hou[i]){int nd=zhong[i];if(nd==fa)continue;dis[nd]=dis[now]+zhi[i];//pre[nd]=i;dfs(nd,now,d+1);f[++tot][0][0]=d;f[tot][0][1]=now;//dui[tot]=now; }
}
void rmq()
{for(i=1;i<=20;i++){for(j=1;j<=tot;j++){if(j+(1<<i)-1>tot)break;if(f[j][i-1][0]>f[j+(1<<(i-1))][i-1][0]){f[j][i][0]=f[j+(1<<(i-1))][i-1][0];f[j][i][1]=f[j+(1<<(i-1))][i-1][1];}else{f[j][i][0]=f[j][i-1][0];f[j][i][1]=f[j][i-1][1];} } }
}
void dfs2(int now)
{int i;
for(i=xia[now];~i;i=hou[i])
{int nd=zhong[i];if(nd==fu[now])continue;dfs2(nd);jilu[i]+=tong[nd];tong[now]+=tong[nd];
}
}
bool work(int heh)
{int i,cnt=0;
memset(jilu,0,sizeof(jilu));
memset(tong,0,sizeof(tong));for(i=1;i<=m;i++){if(che[i].jl>heh){tong[che[i].x]++;tong[che[i].y]++;tong[che[i].lca]-=2; ++cnt;} else break; }dfs2(1);
for(i=1;i<=2*n-2;i++)
{if(jilu[i]==cnt&&(che[1].jl-zhi[i])<=mid)return 1;
}
return 0;
}
int main()
{freopen("transport.in","r",stdin);freopen("transport.out","w",stdout);memset(xia,-1,sizeof(xia));for(i=0;i<=18;i++){for(j=(1<<i);j<(1<<(i+1));j++){loge[j]=i;} }tot=-1; scanf("%d%d",&n,&m);for(i=1;i<n;i++){scanf("%d%d%d",&x,&y,&z);if(x>y)swap(x,y);jia(x,y,z);jia(y,x,z);}dis[1]=0;tot=0;dfs(1,0,1);rmq(); for(i=1;i<=m;i++){scanf("%d%d",&x,&y);if(fir[x]>fir[y])swap(x,y);che[i].x=x;che[i].y=y;int jl=fir[y]-fir[x];if(f[fir[x]][loge[jl]][0]<f[fir[y]-(1<<loge[jl])+1][loge[jl]][0]){lca=f[fir[x]][loge[jl]][1];}else lca=f[fir[y]-(1<<loge[jl])+1][loge[jl]][1];che[i].jl=dis[x]+dis[y]-dis[lca]*2;che[i].lca=lca;
// cout<<"lca="<<x<<" "<<y<<" "<<lca<<endl; }sort(che+1,che+1+m,cmp); l=0;r=che[1].jl;ans=che[1].jl;while(l<r){mid=(l+r)>>1;if(work(mid))ans=mid,r=mid; else l=mid+1;}printf("%d",ans);
}
2017.5.9 运输计划 失败总结相关推荐
- sqlserver创建对于job失败_创建维护计划失败创建 对于 JobStep“子计划”失败
创建维护计划失败. =================================== 创建 对于 JobStep"子计划"失败. (Microsoft.SqlServer.M ...
- [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告
[NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...
- BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MB Submit: 1388 Solved: 860 [Submit][Stat ...
- P2680 运输计划(树上差分+lca+二分)
题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间 ...
- P2680 运输计划
传送门 十分显然完成工作的时间和航耗时最长的运输计划有关 所以题目意思就是要求最大值最小 所以可以想到二分 把所有大于mid时间的航线打上标记,显然删边只能在所有这些航线的公共路径上 要如何快速打标记 ...
- [NOIP2015提高组]运输计划
题目:BZOJ4326.洛谷P2680.Vijos P1983.UOJ#150.codevs4632.codevs5440. 题目大意:有一棵带权树,有一些运输计划,第i个运输计划从ai到bi,耗时为 ...
- cogs2109 [NOIP2015] 运输计划
cogs2109 [NOIP2015] 运输计划 二分答案+树上差分. STO链剖巨佬们我不会(太虚伪了吧 首先二分一个答案,下界为0,上界为max{路径长度}. 然后判断一个答案是否可行,这里用到树 ...
- UOJ #150 【NOIP2015】 运输计划
题目描述 公元 \(2044\) 年,人类进入了宇宙纪元. \(L\) 国有 \(n\) 个星球,还有 \(n-1\) 条双向航道,每条航道建立在两个星球之间,这 \(n-1\) 条航道连通了 \(L ...
- [luogu2680] 运输计划 (lca+二分+树上差分)
传送门 Description Input Output 一个整数,表示小 P 的物流公司完成阶段性工作所需要的最短时间. Sample Input 6 3 1 2 3 1 6 4 3 1 7 4 3 ...
最新文章
- prozilla Linux下的下载利器
- boost::test::basic_cstring相关的测试程序
- HDU 2242 双连通分量 考研路茫茫——空调教室
- 鸿蒙系统 塞班,华为鸿蒙系统来了:安卓系统会成为下一个“塞班”吗?
- 12306能删候补订单记录_2019最新火车候补购票十大问题
- sqlserver 没有维护计划_设定数据库备份计划,安全放心不怕事!
- NLP入门之N元语法模型
- 手把手教做无盘服务器,手把手教你做锐起无盘(完整).doc
- 文献阅读: 基因组选择技术在农业动物育种中的应用
- raid卡组不同raid_Linux 软件阵列与低端硬件阵列卡性能对比
- 可靠性评价类毕业论文文献都有哪些?
- exchange服务器重装后,Exchange 服务器 2010 SP3 安装更新汇总 30补丁包后Exchange控制台初始化失败?...
- 学那么多东西有屁用,不如先建立自己的知识体系
- PHP在线发信投稿系统网站程序
- 信息学奥赛第九节 —— 贪心算法(需要安排几位师傅加工零件 + 排队打水问题)
- 蓝牙标签与蓝牙信标的区别
- uniapp:uni_modules组件开发与发布
- OJ每日一练——羞涩的答复
- 完美洗牌算法简析与代码实现
- 【深度学习】(ICCV-2021)PVT-金字塔 Vision Transformer及PVT_V2
热门文章
- SpringCloud的Ribbon负载均衡
- Android笔记 定义意图过滤器intent- filter demo
- 高等组合学笔记(十): 分拆数恒等式, 分拆函数同余性质
- Java中按位运算符
- 哪个专业学python语言_想学Python编程?你真的适合吗?
- matlab icol,Matlab 图像处理相关函数命令大全
- 匿名函数php作用,PHP匿名函数可以干什么用
- IO流——字节流的使用
- 有什么办法可以判断页面是静态还是动态?_你知道seo到底是什么吗?该怎么优化?...
- python中head_Python(Head First)学习笔记:六