这个题检验的方法没想到、、主要是很长时间没接触差分了、、

看来树上的问题主要优化点就是  求路径时差分、倍增、、、

所以有些题不一定是异常巧妙的方法,有时只是一些工具套路、、、

检验的方式当然是 求出那一条边来,,如果去掉这一条边,所有大于答案的都需要去掉,所以检验就变成了大于答案的边是否都经过这一条边

另外由于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 运输计划 失败总结相关推荐

  1. sqlserver创建对于job失败_创建维护计划失败创建 对于 JobStep“子计划”失败

    创建维护计划失败. =================================== 创建 对于 JobStep"子计划"失败. (Microsoft.SqlServer.M ...

  2. [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告

    [NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...

  3. BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 1388  Solved: 860 [Submit][Stat ...

  4. P2680 运输计划(树上差分+lca+二分)

    题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间 ...

  5. P2680 运输计划

    传送门 十分显然完成工作的时间和航耗时最长的运输计划有关 所以题目意思就是要求最大值最小 所以可以想到二分 把所有大于mid时间的航线打上标记,显然删边只能在所有这些航线的公共路径上 要如何快速打标记 ...

  6. [NOIP2015提高组]运输计划

    题目:BZOJ4326.洛谷P2680.Vijos P1983.UOJ#150.codevs4632.codevs5440. 题目大意:有一棵带权树,有一些运输计划,第i个运输计划从ai到bi,耗时为 ...

  7. cogs2109 [NOIP2015] 运输计划

    cogs2109 [NOIP2015] 运输计划 二分答案+树上差分. STO链剖巨佬们我不会(太虚伪了吧 首先二分一个答案,下界为0,上界为max{路径长度}. 然后判断一个答案是否可行,这里用到树 ...

  8. UOJ #150 【NOIP2015】 运输计划

    题目描述 公元 \(2044\) 年,人类进入了宇宙纪元. \(L\) 国有 \(n\) 个星球,还有 \(n-1\) 条双向航道,每条航道建立在两个星球之间,这 \(n-1\) 条航道连通了 \(L ...

  9. [luogu2680] 运输计划 (lca+二分+树上差分)

    传送门 Description Input Output 一个整数,表示小 P 的物流公司完成阶段性工作所需要的最短时间. Sample Input 6 3 1 2 3 1 6 4 3 1 7 4 3 ...

最新文章

  1. prozilla Linux下的下载利器
  2. boost::test::basic_cstring相关的测试程序
  3. HDU 2242 双连通分量 考研路茫茫——空调教室
  4. 鸿蒙系统 塞班,华为鸿蒙系统来了:安卓系统会成为下一个“塞班”吗?
  5. 12306能删候补订单记录_2019最新火车候补购票十大问题
  6. sqlserver 没有维护计划_设定数据库备份计划,安全放心不怕事!
  7. NLP入门之N元语法模型
  8. 手把手教做无盘服务器,手把手教你做锐起无盘(完整).doc
  9. 文献阅读: 基因组选择技术在农业动物育种中的应用
  10. raid卡组不同raid_Linux 软件阵列与低端硬件阵列卡性能对比
  11. 可靠性评价类毕业论文文献都有哪些?
  12. exchange服务器重装后,Exchange 服务器 2010 SP3 安装更新汇总 30补丁包后Exchange控制台初始化失败?...
  13. 学那么多东西有屁用,不如先建立自己的知识体系
  14. PHP在线发信投稿系统网站程序
  15. 信息学奥赛第九节 —— 贪心算法(需要安排几位师傅加工零件 + 排队打水问题)
  16. 蓝牙标签与蓝牙信标的区别
  17. uniapp:uni_modules组件开发与发布
  18. OJ每日一练——羞涩的答复
  19. 完美洗牌算法简析与代码实现
  20. 【深度学习】(ICCV-2021)PVT-金字塔 Vision Transformer及PVT_V2

热门文章

  1. SpringCloud的Ribbon负载均衡
  2. Android笔记 定义意图过滤器intent- filter demo
  3. 高等组合学笔记(十): 分拆数恒等式, 分拆函数同余性质
  4. Java中按位运算符
  5. 哪个专业学python语言_想学Python编程?你真的适合吗?
  6. matlab icol,Matlab 图像处理相关函数命令大全
  7. 匿名函数php作用,PHP匿名函数可以干什么用
  8. IO流——字节流的使用
  9. 有什么办法可以判断页面是静态还是动态?_你知道seo到底是什么吗?该怎么优化?...
  10. python中head_Python(Head First)学习笔记:六