题目:

题目背景

NOIP2015 提高组 Day2 T3

题目描述

公元2044年,人类进入了宇宙纪元。

L国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了L国的所有星球。

小P掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道是需要时间的,对于航道 j ,任意飞船驶过它所花费的时间为 tj ,并且任意两艘飞船之间不会产生任何干扰。

为了鼓励科技创新,L国国王同意小P的物流公司参与L国的航道建设,即允许小P把某一条航道改造成虫洞,飞船驶过虫洞不消耗时间。

在虫洞的建设完成前小P的物流公司就预接了 m 个运输计划。在虫洞建设完成后,这 m 个运输计划会同时开始,所有飞船一起出发。当这 m 个运输计划都完成时,小P的物流公司的阶段性工作就完成了。

如果小P可以自由选择将哪一条航道改造成虫洞,试求出小P的物流公司完成阶段性工作所需要的最短时间是多少?

输入格式

第一行包括两个正整数 n、m,表示L国中星球的数量及小P公司预接的运输计划的数量,星球从 1 到 n 编号。

接下来 n-1 行描述航道的建设情况,其中第 i 行包含三个整数 ai, bi 和 ti,表示第 i 条双向航道修建在 ai 与 bi 两个星球之间,任意飞船驶过它所花费的时间为 ti。

接下来 m 行描述运输计划的情况,其中第 j 行包含两个正整数 uj 和 vj ,表示第 j 个运输计划是从 uj 号星球飞往 vj 号星球。

输出格式

共 1 行,包含 1 个整数,表示小P的物流公司完成阶段性工作所需要的最短时间。

样例数据 1

输入  [复制]

 

6 3 
1 2 3 
1 6 4 
3 1 7 
4 3 6 
3 5 5 
3 6 
2 5 
4 5

输出

11

备注

【样例1说明】
将第1条航道改造成虫洞:则三个计划耗时分别为:11、12、11,故需要花费的时间为12。
将第2条航道改造成虫洞:则三个计划耗时分别为:7、15、11,故需要花费的时间为15。
将第3条航道改造成虫洞:则三个计划耗时分别为:4、8、11,故需要花费的时间为11。
将第4条航道改造成虫洞:则三个计划耗时分别为:11、15、5,故需要花费的时间为15。
将第5条航道改造成虫洞:则三个计划耗时分别为:11、10、6,故需要花费的时间为11。
故将第3条或第5条航道改造成虫洞均可使得完成阶段性工作的耗时最短,需要花费的时间为11。

【数据范围】 
所有测试数据的范围和特点如下表所示:

aaarticlea/png;base64,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" alt="" />

请注意常数因子带来的程序效率上的影响。

题解:

二分+树上差分(+dfs序)

首先二分答案··对大于答案的路径给路径上所有的边打上标记··

然后找出是否有条边为这些打标记的边的并集并且最长的一条打标记的路径减去这条边后总长度小于枚举的答案即可··

打标记的话可以用树链剖分··而我用的是差分··这里也第一次学到了打边上差分的方法··

对于一条路径x->y,我们只需tag[x]++,tag[y]++,tag[lca(x,y)]-=2即可····

然后统计tag的话可以直接dfs··也可以通过dfs序··我们从最大的dfs序向最小的枚举··然后依次将枚举的点的tag统计进入它的father即可···然而我是直接dfs的

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=3e5+;
int tot,first[N],next[N*],go[N*],deep[N],val[N*],dis[N],tag[N],len[N];
int n,m,g[N][],ans,Maxx,mem[N];
struct node
{
int a,b,val,lca;
}edge[N];
bool cmp(node a,node b)
{
return a.val>b.val;
}
inline int R()
{
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar()) f=(f<<)+(f<<)+c-'';
return f;
}
inline void comb(int a,int b,int c)
{
next[++tot]=first[a],first[a]=tot,go[tot]=b,val[tot]=c;
next[++tot]=first[b],first[b]=tot,go[tot]=a,val[tot]=c;
}
inline void dfs1(int u,int fa)
{
for(int e=first[u];e;e=next[e])
{
int v=go[e];
if(v==fa) continue;
dis[v]=dis[u]+val[e];len[v]=val[e];
deep[v]=deep[u]+,g[v][]=u,dfs1(v,u);
}
}
inline int get(int a,int b)
{
if(deep[a]<deep[b]) swap(a,b);
int i,j;
for(i=;(<<i)<=deep[a];i++);i--;
for(j=i;j>=;j--)
if(deep[a]-(<<j)>=deep[b]) a=g[a][j];
if(a==b) return a;
for(i=;i>=;i--)
if(g[b][i]!=g[a][i]) a=g[a][i],b=g[b][i];
return g[a][];
}
inline void dfs2(int u,int fa)
{
for(int e=first[u];e;e=next[e])
{
int v=go[e];
if(v==fa) continue;
dfs2(v,u);tag[u]+=tag[v];
}
}
inline bool jud(int u,int fa,int tim,int maxx)
{
if(tag[u]==tim&&len[u]>=maxx) return true;
for(int e=first[u];e;e=next[e])
{
int v=go[e];
if(v==fa) continue;
if(jud(v,u,tim,maxx)) return true;
}
}
inline bool check(int x)
{
int maxx=,cnt=;
memset(tag,,sizeof(tag));
for(int i=;i<=m;i++)
{
if(edge[i].val>x)
{
maxx=max(maxx,edge[i].val-x);cnt++;
tag[edge[i].a]++,tag[edge[i].b]++,tag[edge[i].lca]-=;
}
else break;
}
if(!cnt) return true;
dfs2(,);
if(mem[cnt]) return mem[cnt]>=maxx;
int Temp=;
for(int i=;i<=n;i++)
if(tag[i]==cnt) Temp=max(Temp,len[i]);
mem[cnt]=Temp;return mem[cnt]>=maxx;
return false;
}
inline void getans()
{
int le=,ri=Maxx;ans=Maxx;
while(le<=ri)
{
int mid=(le+ri)/;
if(check(mid)) ans=mid,ri=mid-;
else le=mid+;
}
}
int main()
{
//freopen("a.in","r",stdin);
n=R(),m=R();int a,b,c;
for(int i=;i<n;i++)
{
a=R(),b=R(),c=R();
comb(a,b,c);Maxx+=c;
}
deep[]=;dfs1(,);
for(int i=;i<=;i++)
for(int j=;j<=n;j++)
g[j][i]=g[g[j][i-]][i-];
for(int i=;i<=m;i++)
{
a=R(),b=R();int lca=get(a,b);
edge[i].a=a,edge[i].b=b;edge[i].val=dis[a]+dis[b]-*dis[lca];
edge[i].lca=lca;
}
sort(edge+,edge+m+,cmp);
getans();
cout<<ans<<endl;
return ;
}

刷题总结——运输计划(bzoj4326)的更多相关文章

  1. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

  2. Noip刷题计划

    写在前面 去年也想刷10年NOIP来着..结果刷到13年就没动力了233... 今年一定要完成目标啊!! "愿你明日重生,醒时心存冬阳" 2018年 题目 首次得分 出错原因 考点 ...

  3. NOIP2015 运输计划(bzoj4326)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 886  Solved: 574[Submit][Status] ...

  4. [BZOJ4326][codevs4632][codevs5440][UOJ#150][NOIP2015]运输计划

    [BZOJ4326][codevs4632][codevs5440][UOJ#150][NOIP2015]运输计划 试题描述 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n− ...

  5. bzoj4326 运输计划

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n ...

  6. BZOJ4326或洛谷2680 运输计划

    BZOJ原题链接 洛谷原题链接 用\(LCA\)初始化出所有运输计划的原始时间,因为答案有单调性,所以二分答案,然后考虑检验答案. 很容易想到将所有超出当前二分的答案的运输计划所经过的路径标记,在这些 ...

  7. Codeforces刷题计划

    Codeforces刷题计划 已完成:-- / -- [Codeforces370E]370E - Summer Reading:构造:(给定某些数,在空白处填数,要求不下降,并且相邻差值<=1 ...

  8. [CODEVS4632][BZOJ4326]运输计划

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

  9. 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划

    [NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ...

随机推荐

  1. SG函数入门&&HDU 1848

    SG函数 sg[i]为0表示i节点先手必败. 首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数.例如mex{0,1,2,4}=3. ...

  2. 第011课_串口(UART)的使用

    from: 第011课_串口(UART)的使用 第001节_辅线1_硬件知识_UART硬件介绍 1. 串口的硬件介绍 UART的全称是 Universal Asynchronous Receiver ...

  3. Array - Two Sum

    import java.util.HashMap; import java.util.Map; /** * 分析: * 普通实现-嵌套循环两次,时间O(n2),空间O(1) * 复杂实现-循环一次,时 ...

  4. 2018.5.5 phpStorm破解2017.3版本方法

    方法一 注册时,在打开的License Activation窗口中选择"License server",在输入框输入下面的网址: http://im.js.cn:8888 (新) ...

  5. JavaScript深入浅出第2课:函数是一等公民是什么意思呢?

    摘要: 听起来很炫酷的一等公民是啥? <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函 ...

  6. OC8051项目启动

  7. PHP做ERP, CRM, CMS系统需要注意哪些地方

    php作为二次开发弱类型语言, 可读性, 可视度都是比较高的. 在很多人眼里, 也许php只能做一些web应用开发, 比如某个公司的网站, 某个公司的网站后台, 其实,我可以告诉大家, php不比任何 ...

  8. loc与iloc函数的使用

    Pandas中loc和iloc函数用法详解(源码+实例)  https://blog.csdn.net/w_weiying/article/details/81411257 Pandas中loc,il ...

  9. 关于.net 项目 nuget包还原项目失败的记录

    在.net项目中,一般通过vs打开项目,会自动进行nuget包还原,可能因为其他一些因素,包还原失败,同时在之前包依赖是可以正常使用,现在却提示包 AutoMapper 6.2.2 与 netcore ...

  10. Python Cdn平台文件md5验证

    第一步 先用脚本实现基本的md5验证 1.python如何实现文件的下载 方法一: 使用 urllib 模块提供的 urlretrieve() 函数.urlretrieve() 方法直接将远程数据下载 ...