不贴代码的原因是我的代码在初中机房。忘记带过来了。

DAY 1 T1随便搞,但是字符串相关的题我经常犯蠢

T2 一个结论题,OAO但是需要高精度写。

具体就是按左手的数除右手的数(还是怎么的来着)排个序

算过去就行了。证明的话QAQ不会,但是曾经想通过

T3 开车旅行 是个倍增 没写【不会】

OAO我好咸啊

DAY2 T1 用拓展欧几里得解,我数学不好直接背板子了。抱歉不能给出详细的讲解。

T2 借教室 这题我写过好几次线段树,没过。始终被TLE 正确做法是二分到哪一个请求可以满足,每次通过重新维护前缀和来check答案。有一个小的优化是如果这次可以完成请求那么下次就直接在上次的前缀和直接加。据说能快一点。

T3 疫情控制 昨年和今年写的时候都是痛不欲生,昨年直接搞了一周左右,今年还好,大约3h就写完+调试完了

预处理每支军队到根节点用的时间。二分时间判断能否完成。

说不清楚还是放代码吧。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
struct edge
{
int nw;
int to;
int val;
};
edge line[];
int n=,m=,head[]={},cnt=;
int amy[]={},deep[]={};
int beiz[][]={},value[][]={};
int tim[]={},from[]={};
int xl[]={};
bool mark[]={},cho[]={};
void add(int f,int t,int v);
void ready();//预处理
void to_do(int nw,int t);//对到不了首都的军队进行处理。
bool check(int nw);//check当前子树是否需要守护(大雾
bool ask(int t);//在规定的时间能否完成
void dfs(int nw);
bool kp(int a,int b);
int main(void)
{
freopen("blockade.in","r",stdin);
freopen("blockade.out","w",stdout);
scanf("%d",&n);
int a=,b=,c=,lf=,rt=,mid=,ans=0x7fffffff;
for(int i=;i<n;i++)
{
scanf("%d%d%d",&a,&b,&c);
rt+=c;
add(a,b,c);
add(b,a,c);
}
beiz[][]=;
deep[]=;
dfs();
scanf("%d",&m);
for(int i=;i<=m;i++)scanf("%d",&amy[i]);
ready();
for(int i=;i<=m;i++)xl[i]=i;
sort(xl+,xl+m+,kp);
while(lf<=rt)
{
mid=(lf+rt)/;
if(ask(mid))rt=mid-,ans=min(ans,mid);
else lf=mid+;
}
if(ans==0x7fffffff)printf("-1");
else printf("%d",ans);
return ;
} bool kp(int a,int b)
{
if(tim[amy[a]]>tim[amy[b]])return ;
return ;
} void add(int f,int t,int v)
{
line[++cnt].nw=t;
line[cnt].to=head[f];
line[cnt].val=v;
head[f]=cnt;
return;
} void dfs(int nw)
{
if(nw>n)return;
int next=;
for(int i=head[nw];i>;i=line[i].to)
{
next=line[i].nw;
if(next==beiz[nw][])continue;
beiz[next][]=nw;
deep[next]=deep[nw]+;
value[next][]=line[i].val;
dfs(next);
}
return;
} void ready()
{
for(int i=;i<=;i++)
for(int j=;j<=n;j++)
{beiz[j][i]=beiz[beiz[j][i-]][i-];value[j][i]=value[j][i-]+value[beiz[j][i-]][i-];}
int tot=,x=;
for(int i=;i<=n;i++)
{
x=i,tot=;
if(tim[x]!=)continue;
for(int j=;j>=;j--)
{
if(deep[x]-(<<j)>=deep[])
{
tot+=value[x][j];
x=beiz[x][j];
if(j==)from[i]=x;
}
}
tim[i]=tot;
}
return;
} bool ask(int t)
{
memset(mark,,sizeof(mark));
memset(cho,,sizeof(cho));
int next=,point=m;
for(int i=;i<=m;i++)
{
if(tim[amy[xl[i]]]<=t)
{
point=i;
break;
}
to_do(amy[xl[i]],t);
cho[xl[i]]=true;
}
for(int i=head[];i>;i=line[i].to)
{
next=line[i].nw;
if(check(next))continue;
for(int j=point;j<=m;j++)
{
if(cho[xl[j]])continue;
if(t-tim[amy[xl[j]]]>=line[i].val||from[amy[xl[j]]]==next)
{
mark[next]=true;
cho[xl[j]]=true;
break;
}
}
if(!mark[next])return false;
}
return true;
} void to_do(int nw,int t)
{
int tot=,x=nw;
for(int i=;i>=;i--)
{
if(tot+value[x][i]<=t)
{
tot+=value[x][i];
x=beiz[x][i];
}
}
mark[x]=true;
return;
} bool check(int nw)
{
if(mark[nw])return true;
int next=;
bool as=false;
for(int i=head[nw];i>;i=line[i].to)
{
next=line[i].nw;
if(next==beiz[nw][])continue;
if(!check(next))return false;
else as=true;
}
return as;
}

【NOIP2012】DAY1+DAY2题解的更多相关文章

  1. A · F · O —— JLOI2018翻车记(附Day1简要题解)

    JLOI2018翻车记 并不知道该怎么写... 算了还是按照标准剧情来吧 这应该是一篇写得非常差的流水账... 2018.04.04 Day -1 省选前在机房的最后一天. 压力并不是很大,毕竟联赛 ...

  2. NOIP2012 疫情控制 题解(LuoguP1084)

    NOIP2012 疫情控制 题解(LuoguP1084) 不难发现,如果一个点向上移动一定能控制更多的点,所以可以二分时间,判断是否可行. 但根节点不能不能控制,存在以当前时间可以走到根节点的点,可使 ...

  3. 「CSP-S」2019年第一届Day1游记+题解

    「CSP-S」2019年第一届Day1游记+题解 Day 1 7:30 A.M. 8:10 A.M. 8:30 A.M. T1 格雷码 题目 考场经历+思考(正解) 8:50 A.M. T2 括号树 ...

  4. NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)

    昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...

  5. NOIp2018集训test-9-22(am/pm) (联考三day1/day2)

    szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...

  6. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  7. noip2011提高组day1+day2解题报告

    Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...

  8. NOIP2013 DAY2题解

    DAY2 T1积木大赛 传送门 题目大意:每次可以选区间[l,r]加1,最少选几次,让每个位置有 它应有的高度. 题解:O(n)扫一遍就好了.后一个比前一个的高度低,那么前一个已经把它覆盖了, 如果高 ...

  9. 模拟测试20191017~18 lrd Day1& Day2

    $Day1:$ $T1:位运算$ 从低位到高位分类讨论就好了 记得判$inf$ $T2:集合论$ 考场上差点就打线段树了 用一个数组维护,同时用一个变量代表当前总体$+$&&$-$的值 ...

随机推荐

  1. 尝试使用Memcached

    尝试使用Memcached遇到的狗血问题   乘着有时间,尝试下利用Memcached进行分布式缓存,其中遇到了不少问题及狗血的事情,开篇记录下,希望对您有帮助. 我之前的项目为:Asp.Net MV ...

  2. 深入剖析Provider Model

    Membership三步曲之进阶篇 - 深入剖析Provider Model Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provide ...

  3. ASP.NET WEB API构建基于REST风格

    使用ASP.NET WEB API构建基于REST风格的服务实战系列教程[开篇] 最近发现web api很火,园内也有各种大神已经在研究,本人在asp.net官网上看到一个系列教程,原文地址:http ...

  4. HBase的索引

    LSM树由来.设计思想以及应用到HBase的索引   讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 哈希存储引擎  是哈希表的持久化实现,支持增.删.改以及随机读取操作,但 ...

  5. [转]loadView的用法,loadView创建基本界面,DidLoad读入数据

    loadview: //   有没有nib 只要是复写了loadview loadview都会被执行     有nib文件的话加载的是nib文件的view  没有的话会按照loadview里的代码加载 ...

  6. [原]逆向iOS SDK -- +[UIImage imageNamed:] 的实现

    汇编代码: ; Dump of assembler code for function +[UIImage imageNamed:] ; R0 = UIImage, R1 = "imageN ...

  7. C# 根据时间创建文件夹

    string file = ((fileNameIndex)index).ToString(); if (!Directory.Exists(HttpContext.Current.Server.Ma ...

  8. jQuery Colorbox是一款弹出层

    jQuery Colorbox使用教程 jQuery Colorbox是一款弹出层,内容播放插件,效果极佳,最关键的是大小只有10KB,当然我主要是用来弹出图片啦,(之前介绍过jquery Fancy ...

  9. .net mvc页面UI之Jquery博客日历控件

    摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果.代码如下: 原文链接转载请注明:http:/ ...

  10. WEB安全入门

    WEB安全入门 信息安全基础 信息安全目标 真实性:对信息的来源进行判断,能对伪造来源的信息予以鉴别, 就是身份认证. 保密性:保证机密信息不被窃听,盗取,或窃听者不能了解信息的真实含义. 完整性:保 ...