NOIP2015BLOCKADE c++ 代码
#include<algorithm>
#include<fstream>
#include<functional>
#include<iostream>
using namespace std;
static const int N=;
typedef long long int64;
struct node
{
int v,w;
node *next;
}alist[*N];
struct heapnode
{
int64 w;
int u;
bool operator>(const heapnode &r)const
{
return w>r.w;
}
};
int p[N][];
int64 w[N][];
void dfs1(int u)
{
for(node *i=alist[u].next;i;i=i->next)
if(i->v!=p[u][])
{
p[i->v][]=u;
w[i->v][]=i->w;
dfs1(i->v);
}
}
bool visit[N];
void dfs2(int u)
{
if(visit[u])return;
if(!alist[u].next->next)return;
visit[u]=true;
for(node *i=alist[u].next;i;i=i->next)
if(i->v!=p[u][])
{
dfs2(i->v);
if(!visit[i->v])
{
visit[u]=false;
break;
}
}
}
int main()
{
ifstream fin("blockade.in");
ofstream fout("blockade.out");
int n(),m();
fin>>n;
node *anode(alist+n+);
for(int i=;i<n-;i++)
{
int u(),v(),ww();
fin>>u>>v>>ww;
anode->v=v;
anode->w=ww;
anode->next=alist[u].next;
alist[u].next=anode++;
anode->v=u;
anode->w=ww;
anode->next=alist[v].next;
alist[v].next=anode++;
}
fin>>m;
static int d[N];
for(int i=;i<m;i++)
fin>>d[i];
int NScount=;
for(node *i=alist[].next;i;i=i->next)
{
NScount++;
p[i->v][]=;
w[i->v][]=i->w;
dfs1(i->v);
}
if(NScount>m)
{
fout<<"-1"<<endl;
return ;
}
for(int j=;j<=;j++)
for(int i=;i<=n;i++)
{
p[i][j]=p[p[i][j-]][j-];
w[i][j]=w[i][j-]+w[p[i][j-]][j-];
}
static heapnode a[N],b[N];
heapnode *atop(),*aback(),*btop(),*bback();
static int _w[N];
for(node *i=alist[].next;i;i=i->next)
_w[i->v]=i->w;
int64 l(),r(1e16),ans(1e16);
greater<heapnode> comp;
while(l<=r)
{
atop=a;
aback=a;
btop=b;
bback=b;
int64 mm=(l+r)>>;
for(int i=;i<=n;i++)
visit[i]=false;
for(int i=;i<m;i++)
{
int u=d[i];
int64 ww=mm;
for(int j=;j>=;j--)
if(p[u][j]&&p[u][j]!=&&ww>=w[u][j])
{
ww-=w[u][j];
u=p[u][j];
}
if(/*p[u][0]==1&&*/ww>w[u][])
{
aback->w=ww-w[u][];
aback->u=u;
aback++;
push_heap(atop,aback,comp);
}
else visit[u]=true;
}
dfs2();
if(visit[])
{
ans=mm;
r=mm-;
}
else
{
for(node *i=alist[].next;i;i=i->next)
if(!visit[i->v])
{
bback->w=i->w;
bback->u=i->v;
bback++;
push_heap(btop,bback,comp);
}
while(btop!=bback||atop!=aback)
{
while(atop!=aback&&!visit[atop->u]&&atop->w<_w[atop->u])
{
visit[atop->u]=true;
pop_heap(atop,aback,comp);
aback--;
}
while(btop!=bback&&visit[btop->u])
{
pop_heap(btop,bback,comp);
bback--;
}
if(btop==bback||atop==aback)break;
if(atop->w>=btop->w)
{
visit[btop->u]=true;
pop_heap(atop,aback,comp);
aback--;
pop_heap(btop,bback,comp);
bback--;
}
else
{
pop_heap(atop,aback,comp);
aback--;
}
}
if(btop==bback)
{
ans=min(ans,mm);
r=mm-;
}
else l=mm+;
}
}
fout<<ans<<endl;
return ;
}
NOIP2015BLOCKADE c++ 代码的更多相关文章
- 日期格式代码出现两次的错误 ORA-01810
错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- redux-amrc:用更少的代码发起异步 action
很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序
直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...
- jsp前端实现分页代码
前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
随机推荐
- 关于setConnectTimeout和setReadTimeout的问题
1.问题描述 这几天测试重构后的下载框架,发现在下载过程中如果网络中断或网络较差,个别应用的下载就会阻塞卡住,一直卡在 “正在下载 xx%”. 2.问题排查和定位 思考:网络差不应该报网络异常的错 ...
- TFS自动签出解决方案sln或者项目文件csproj的解决办法
问题: 最近公司一个项目组的源代码解决方案打开时总是出现解决方案或者部分项目被自动签出的情况,但签入又提示没有变更.事情虽 小,导致几个程序员要用项目文件时总是要找其他人签入.浪费不少时间.出现时间有 ...
- 搭建github博客,hexo主题
买个域名,多少钱的都有,看自己喜欢,可以去万网,ali嘛. 一般在windows,下载gitbash(配置公钥,全局用户名和email),node.js(不用配置). 新建github项目,添加公钥( ...
- Mac 搭建达尔文流媒体服务器
Darwin Streaming Server简称DSS.DSS是Apple公司提供的开源实时流媒体播放服务器程序. 1.下载安装 官网地址:http://dss.macosforge.org/ Ma ...
- Warning: Data truncated for column 'xxxx' at row 1
The problem was that I changed the column's length only in the program.I had to do either change the ...
- TokuDB的索引结构–分形树的实现
分形树简介 原文:http://www.bitstech.net/2015/12/15/tokudb-index-introduction/ 分形树是一种写优化的磁盘索引数据结构. 在一般情况下, 分 ...
- Redis 安装配制
Redis 安装配制 redis 安装分为单机安装.伪集群安装.集群安装. Redis 下载地址:http://www.redis.cn/download.html Redis 在线测试工具:http ...
- 各大主流.Net的IOC框架性能测试比较(转)
出处:http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html 在上一篇中,我简单介绍了下Autofac的使用,有人希 ...
- asp.net core 1.1 mysqlsugarCore mysql.data 要 7.0.5.0
Message=Could not load file or assembly 'MySql.Data, Version=7.0.5.0, Culture=neutral, PublicKeyToke ...
- redis集群种类(转)
原文:http://blog.csdn.net/c295477887/article/details/52487621 关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持 ...