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

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. 【工作笔记一】【转】Visual Studio 2012常用快捷键总结

    Visual Studio 2012常用快捷键总结 原文  http://blog.csdn.net/yl2isoft/article/details/9886379   写在前面: 都知道,合理使用 ...

  2. px/em/pt区别和转换

    老是被人问到px.pt和em的区别,自己有时候也会纠结到底该用什么单位,今天特意查了一些文章,下面这篇虽然很久远了,但解释的比较全面,转载收藏之.点击查看原文 这里引用的是Jorux的“95%的中国网 ...

  3. knockout笔记

    根据汤姆大叔博客总结-笔记: =============<script type="text/javascript"> $(function () { var View ...

  4. EF6.0执行sql存储过程案例

    数据填充实体:ZF_Btns; 存储过程名称:test; --方式一: db.Database.SqlQuery<ZF_Btns>("test @Id,@UName output ...

  5. 动态注册HttpModule

    动态注册HttpModule 2014-06-05 08:58 by 汤姆大叔, 757 阅读, 4 评论, 收藏, 编辑 文章内容 通过前面的章节,我们知道HttpApplication在初始化的时 ...

  6. 学习GDI+ (1)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. Asp.net MVC的Model Binder工作流程以及扩展方法(1)

    Asp.net MVC的Model Binder工作流程以及扩展方法(1)2014-03-19 08:02 by JustRun, 523 阅读, 4 评论, 收藏, 编辑 在Asp.net MVC中 ...

  8. JS代码平面化

    重构JS代码 - 让JS代码平面化   js中的嵌套函数用的很多,很牛叉,那为何要平面化? 易懂(自己及他人) 易修改(自己及他人) 平时Ajax调用写法(基于jQuery) $.post('url' ...

  9. DotNetOpenAuth搭建OAuth2.0

    使用DotNetOpenAuth搭建OAuth2.0授权框架 标题还是一如既往的难取. 我认为对于一个普遍问题,必有对应的一个简洁优美的解决方案.当然这也许只是我的一厢情愿,因为根据宇宙法则,所有事物 ...

  10. Hadoop能力测试图谱

    一张图测试你的Hadoop能力-Hadoop能力测试图谱 1.引言 看到一张图,关于Hadoop技术框架的图,基本上涉及到Hadoop当前应用的主要领域,感觉可以作为测试Hadoop开发人员当前能力和 ...