NOIP2015Day2T3运输计划(二分+树上差分)
做了这么多NOIPTG的题,这是唯一 一道一眼秒的T3(有时候T2还不会做QAQ)。。。
题目大意就不说了QWQ
思路大概是:啊最大值最小化,来个二分。检验mid的话,显然就是用最长路径减去所有边权>mid的边的交边中最大值,如果不大于mid就可行,那树上差分呀!(完)
神tmDay2 T1T3都有最大值最小化
之前写过加点权的树上差分,就是这题(戳我)。。。然后自己yy出了边的树上差分,其实和点一个道理,因为每个点的父亲边只有一条,于是给这个点加一个权值数组表示父亲边被使用的次数。每有一条路径(u,v)加入就cnt[u]++,cnt[v]++,cnt[lca(u,v)]-=2,那某个点x的父亲边被使用的次数就是x这棵子树的权值和辣!
一开始只拿了80分。。因为我在没有建好树的情况下,也就是刚刚读入两个点及其边权(x,y,z)时直接就val[y]++了,这时候还不知道x和y谁是父亲QAQ
代码如下:
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
struct poi{int too,pre,dis;}e[],lik[];
int n,m,x,y,z,l,r,mid,mx,val[],fa[],tot,tot2,q[][],cntt[];
int cnt[],last[],last2[],d[];
bool v[];
void add(int x,int y,int z){e[++tot].too=y;e[tot].dis=z;e[tot].pre=last[x];last[x]=tot;}
void add2(int x,int y,int z){lik[++tot2].too=y;lik[tot2].dis=z;lik[tot2].pre=last2[x];last2[x]=tot2;}
int gf(int x){return fa[x]==x?x:fa[x]=gf(fa[x]);}
void tarjan(int x)
{
v[x]=;fa[x]=x;
for(int i=last2[x];i;i=lik[i].pre)if(v[lik[i].too])q[lik[i].dis][]=gf(lik[i].too);
for(int i=last[x],too=e[i].too;i;i=e[i].pre,too=e[i].too)if(!v[too])d[too]=d[x]+e[i].dis,tarjan(too),fa[too]=x;
}
int dfs(int x,int fa)
{
int sum=cnt[x];
for(int i=last[x],too=e[i].too;i;i=e[i].pre,too=e[i].too)if(too!=fa)val[too]=e[i].dis,sum+=dfs(too,x);
return cntt[x]=sum;
}
bool ck()
{
int total=,mxx=;
memset(cnt,,sizeof(cnt));
for(int i=;i<=m;i++)if(d[q[i][]]+d[q[i][]]-*d[q[i][]]>mid)total++,cnt[q[i][]]++,cnt[q[i][]]++,cnt[q[i][]]-=;
dfs(,);
for(int i=;i<=n;i++)if(cntt[i]==total&&val[i]>mxx)mxx=val[i];
return mx-mxx<=mid;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n-;i++)scanf("%d%d%d",&x,&y,&z),add(x,y,z),add(y,x,z);
for(int i=;i<=m;i++)scanf("%d%d",&x,&y),add2(x,y,i),add2(y,x,i),q[i][]=x,q[i][]=y;
tarjan();
for(int i=;i<=m;i++)mx=max(mx,d[q[i][]]+d[q[i][]]-*d[q[i][]]);
l=;r=mx;
while(l<r)
{
mid=(l+r)/;
if(ck())r=mid;else l=mid+;
}
printf("%d\n",l);
}
NOIP2015Day2T3运输计划(二分+树上差分)的更多相关文章
- 洛谷 P2680 运输计划-二分+树上差分(边权覆盖)
P2680 运输计划 题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条 ...
- P2680 运输计划 二分+树上差分
又咕咕了几天\(QwQ\) 思路:二分+树上差分 提交:\(\geq5\)次 错因:\(lca\)写错+卡了很久常数(哪位大佬帮我康康,有更好的写法请指出\(QwQ\)) 题解: 我们先将原问题转化为 ...
- BZOJ 4326 NOIP2015 运输计划 (二分+树上差分)
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1930 Solved: 1231[Submit][Statu ...
- Luogu P2680 运输计划(二分+树上差分)
P2680 运输计划 题意 题目背景 公元\(2044\)年,人类进入了宇宙纪元. 题目描述 公元\(2044\)年,人类进入了宇宙纪元. \(L\)国有\(n\)个星球,还有\(n-1\)条双向航道 ...
- BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MB Submit: 1388 Solved: 860 [Submit][Stat ...
- [NOIP2015]运输计划(树上差分+LCA+二分)
Description 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球. 小 P 掌管 ...
- 洛谷P2680 运输计划(树上差分+二分)
传送门 考虑树上乱搞 首先这是满足二分性质的,如果在某个时间可以完成工作那么比他更长的时间肯定也能完成工作 然后考虑二分,设当前答案为$mid$,如果有一条链的长度大于$mid$,那么这条链上必须得删 ...
- vijos 运输计划 - 二分答案 - 差分 - Tarjan
Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家 ...
- 【Luogu】P2680运输计划(树上差分+二分)
题目链接 总体思路……怎么说呢……是个暴力吧…… 首先用倍增预处理出每条路径的长度. 然后按长度把路径排序. 然后二分答案.对于当前答案mid检验,怎么检验呢? 首先差分把所有长度比mid大的链上除了 ...
随机推荐
- 汽车VIN码识别/汽车车架号OCR识别,移动端VIN码识别,OCR扫描工具
本文推荐了一项汽车VIN码自动识别技术,用户通过手机“扫一扫”的简单操作,就可以快速识别VIN码,查询到车辆的详细信息,为汽修汽配.二手车交易.车辆监管.查勘理赔提高工作效率. VIN是英文Vehic ...
- 怎样下载Firefox与Chrome浏览器驱动
在浏览器地址栏输入https://www.seleniumhq.org/ 打开Selenium官网 下载Firefox浏览器驱动 解压到本地 下载Chrome浏览器驱动 解压到本地 把这2个驱动放到P ...
- Selenium(Python)驱动Chrome浏览器
Chrome浏览器与chromedriver.exe驱动可以是官网上最新的, 随意! Chrome.py: from selenium import webdriverfrom selenium.we ...
- python 终极篇 --- django 路由系统
URL配置 基本格式: from django.conf.urls import url urlpattern ...
- CsvHelper文档-1前言
CsvHelper文档-1前言 英文文档链接地址:CsvHelper Document 开源项目地址:CsvHelper 翻译于2018-1-5,原本可能会随时更新: 每一段代码都是经过我实际测试的, ...
- ajax获取动态列表数据后的分页问题
ajax获取动态列表数据后的分页问题 这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数 ...
- java知乎爬虫
好久没写博客了,前阵子项目忙着上线,现在有点空闲,就把最近写的一个爬虫和大家分享下,统计结果放在了自己买的阿里云服务器上(点此查看效果),效果如下: 程序是在工作之余写的,用了java 的webmgi ...
- 无法启动mysql服务 错误1067:进程意外中止
这个错误在前些周遇到过,没有解决,直接粗暴的卸载重装了,自己用的是wampserver集成环境,重装的后果是mysql里面的一些已有的数据库就没有了,有点小悲剧,不过幸好都是一些测试用的数据库,后面直 ...
- 20172330 2017-2018-1 《Java程序设计》第九周学习总结
20172330 2017-2018-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本周的学习包括两章内容,分别为异常和递归. 异常 错误和异常都是对象,代表非正常情况或者无 ...
- 软工实践-Alpha 冲刺 (1/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 学习了UI设计软件的使用,了解了项目开发的具体流程. 展示 ...