日期:

八月七号

 总分:

300分

 难度:

提高 ~ 省选  

 得分:

112分(OvO)

题目目录:

  T1:幸福的道路

  T2:Solitaire

  T3:Flags

赛后心得:

第一题裸树d啊!竟然花了一个多小时才切掉……

第二题输出样例成功骗到12分。

题解:

T1:幸福的道路

树形dp,先两次dfs算出每个点的最长路,用两个单调队列维护每天的极差……做完了……

CODE:

 #include<iostream>
#include<queue>
#include<cstdio>
#include<cmath>
using namespace std; int n,m,x,tot=,h[];
long long y,f[],g[],a[];
struct Edge{
int x,next;
long long dis;
}e[];
int q1[],q2[]; inline void add_edge(int x,int y,long long z){
e[++tot].x=y,e[tot].dis=z;
e[tot].next=h[x],h[x]=tot;
} void dfs1(int x,int fa){
for(int i=h[x];i;i=e[i].next){
if(e[i].x==fa)continue;
dfs1(e[i].x,x);
f[x]=max(f[x],f[e[i].x]+e[i].dis);
}
} void dfs2(int x,int fa){
long long maxn=,sec=;
for(int i=h[x];i;i=e[i].next){
if(e[i].x==fa)continue;
if(f[e[i].x]+e[i].dis>maxn)
sec=maxn,maxn=f[e[i].x]+e[i].dis;
else sec=max(sec,f[e[i].x]+e[i].dis);
g[e[i].x]=g[x]+e[i].dis;
}
for(int i=h[x];i;i=e[i].next){
if(e[i].x==fa)continue;
if(f[e[i].x]+e[i].dis==maxn)
g[e[i].x]=max(g[e[i].x],sec+e[i].dis);
else g[e[i].x]=max(g[e[i].x],maxn+e[i].dis);
dfs2(e[i].x,x);
}
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d%lld",&x,&y);
add_edge(i,x,y);
add_edge(x,i,y);
}
dfs1(,-),dfs2(,-);
for(int i=;i<=n;i++)a[i]=max(f[i],g[i]);
int l1=,l2=,r1=,r2=,tmp=,ans=;;
for(int i=;i<=n;i++){
while(l1<=r1&&a[i]<=a[q1[r1]])r1--;
while(l2<=r2&&a[i]>=a[q2[r2]])r2--;
q1[++r1]=i,q2[++r2]=i;
if(a[q2[l2]]-a[q1[l1]]>m){
if(q2[l2]<=q1[l1])tmp=q2[l2],l2++;
else tmp=q1[l1],l1++;
}
ans=max(ans,i-tmp);
}
printf("%d",ans);
}

T2:Solitaire

题解戳这里

CODE:

 #include<iostream>
#include<cstdio>
using namespace std; #define mod 1000000007
int n,k,ans,f[][],sum[]; int main(){
scanf("%d%d",&n,&k);
f[][n+]=;
for(int i=;i<=k;i++)
for(int j=n+;j>=;j--){
sum[j]=(sum[j+]+f[i-][j])%mod;
f[i][j]=(j<=n-i+?sum[j]:);
}
ans=(f[k][]-f[k-][]+mod)%mod;
for(int i=;i<=n-k-;i++)ans=(ans+ans)%mod;
printf("%d",ans);
}

T3:Flags

2-sat 问题

题解戳这里

CODE:

 #include<iostream>
#include<cstdio>
#include<stack>
#include<algorithm>
#include<cstring>
using namespace std; int v[];
int n,x,y,tot=,h[];
int scc[],dfn[],low[],C,cnt;
bool vis[];
struct Edge{
int x,next;
}e[];
pair<int,int> a[];
stack<int> s; inline void add_edge(int x,int y){
e[++tot].x=y;
e[tot].next=h[x],h[x]=tot;
} void tarjan(int x){
dfn[x]=low[x]=++cnt;
s.push(x),vis[x]=true;
for(int i=h[x];~i;i=e[i].next){
if(!dfn[e[i].x]){
tarjan(e[i].x),low[x]=min(low[x],low[e[i].x]);
}else if(vis[e[i].x]){
low[x]=min(low[x],dfn[e[i].x]);
}
}
if(dfn[x]==low[x]){
C++;
int tmp;
for(;;){
tmp=s.top();
vis[tmp]=false,scc[tmp]=C;
s.pop();
if(tmp==x)break;
}
}
} void build(int o,int l,int r){
if(r-l==){
add_edge(o+n*,a[l].second^);
return;
}
add_edge(o+n*,(o<<)+n*);
add_edge(o+n*,(o<<|)+n*);
int mid=l+r>>;
build(o<<,l,mid),build(o<<|,mid,r);
} void link(int o,int l,int r,int x,int y,int a){
if(l>=x&&r<=y){
add_edge(a,o+n*);
return;
}
int mid=l+r>>;
if(x<mid)link(o<<,l,mid,x,y,a);
if(y>mid)link(o<<|,mid,r,x,y,a);
} inline pair<int,int> get(int x,int len){
int l=,r=x;
pair<int,int> ans;
while(l<r){
int mid=l+r>>;
if(a[x].first-a[mid].first<len)r=mid;
else l=mid+;
}
ans.first=l;
l=x,r=n*-;
while(l<r){
int mid=l+r+>>;
if(a[mid].first-a[x].first<len)l=mid;
else r=mid-;
}
ans.second=l;
return ans;
} inline bool check(int d){
memset(scc,,sizeof(scc));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(h,-,sizeof(h)),tot=;
build(,,n*);
for(int i=;i<n*;i++){
int id=a[i].second;
pair<int,int> x=get(i,d);
if(i<x.second)link(,,n*,i+,x.second+,id);
if(x.first<i)link(,,n*,x.first,i,id);
}
C=cnt=;
for(int i=;i<n*;i++)if(!dfn[i])tarjan(i);
for(int i=;i<n*;i++)
if(scc[a[i].second]==scc[a[i].second^])return false;
return true;
} int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
a[*i+]=make_pair(x,*i+);
a[*i]=make_pair(y,*i);
}
sort(a,a+n*);
int l=,r=;
while(l<r){
int mid=l+r+>>;
if(check(mid))l=mid;
else r=mid-;
}
printf("%d",l);
}

2018.8.8 Noip2018模拟测试赛(二十一)的更多相关文章

  1. 2018.8.7 Noip2018模拟测试赛(二十)

    日期: 八月七号  总分: 300分  难度: 提高 ~ 省选    得分: 100分(呵呵一笑) 题目列表: T1:SS T2:Tree Game T3:二元运算 赛后反思: Emmmmmm…… 开 ...

  2. 2018.7.31 Noip2018模拟测试赛(十六)

     日期: 七月最后一天  总分: 300分  难度: 提高 ~ 省选  得分: 30分(少的可怜) 我太弱了:(题目目录) T1:Mushroom追妹纸 T2:抵制克苏恩 T3:美味 失分分析:(QA ...

  3. 2018.8.6 Noip2018模拟测试赛(十九)

    日期: 八月六号  总分: 300分  难度: 提高 ~ 省选    得分: 10分(MMP) 题目目录: T1:Tree T2:异或运算 T3:Tree Restoring 赛后反思: Emmmmm ...

  4. 2017.8.2 Noip2018模拟测试赛(十八)

     日期: 八月二日  总分: 300分  难度: 提高 ~ 省选  得分: 40分(又炸蛋了!!) 题目列表: T1:分手是祝愿 T2:残缺的字符串 T3:树点涂色 赛后心得: 哎,T1求期望,放弃. ...

  5. 2017.8.1 Noip2018模拟测试赛(十七)

    日期: 八月第一天  总分: 300分  难度: 提高 ~ 省选    得分: 100分(不应该啊!) 题目目录: T1:战争调度 T2:选数 T3:由乃的OJ 赛后心得: MMP,首先第一题花了大概 ...

  6. [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania

    [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...

  7. noi2019模拟测试赛(四十七)

    noi2019模拟测试赛(四十七) T1与运算(and) 题意: ​ 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...

  8. EZ 2018 05 04 NOIP2018 模拟赛(十二)

    这次的试卷应该是激励我们一下的,链接 然后大家的分数就都很高,然后我就210被一群秒A T2的240大佬爆踩 掉了5rating但Rank竟然发杀了 X_o_r dalao && YZ ...

  9. EZ 2018 06 24 NOIP2018 模拟赛(二十)

    很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...

随机推荐

  1. [LUOGU] NOIP提高组模拟赛Day1

    题外话:以Ingress为题材出的比赛好评,绿军好评 T1 考虑枚举第\(i\)个人作为左边必选的一个人,那左边剩余\(i-1\)个人,选法就是\(2^{i-1}\),也就是可以任意选或不选,右侧剩余 ...

  2. virtualbox安装win7系统报错(“FATAL:No bootable medium found!”)

    virtualbox属于傻瓜式安装虚拟系统,但博主安装win7系统时,无论怎么调试都还是出现截图所述样式,网上教程很多,但是都不行,其实只有一个根本原因安装的iso镜像不是原生镜像,下载的镜像已经是被 ...

  3. Python基础——异常

    捕捉所有异常 for i in range(10): try: input_number=input('write a number') if input_number=='q': break res ...

  4. Pytorch学习(一)—— 自动求导机制

    现在对 CNN 有了一定的了解,同时在 GitHub 上找了几个 examples 来学习,对网络的搭建有了笼统地认识,但是发现有好多基础 pytorch 的知识需要补习,所以慢慢从官网 API进行学 ...

  5. 关于host,nslookup,dig 的安装

    host,nslookup,dig依赖bind包,所以先看一下系统有没有bind包 命令如下:rpm -qa |grep bind 如果没有或者版本太低请升级安装 命令是:yum install bi ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study

    262144K   Ryuji is not a good student, and he doesn't want to study. But there are n books he should ...

  7. CodeForce--Benches

    A. Benches   There are nn benches in the Berland Central park. It is known that aiai people are curr ...

  8. 如何用好 Google 等搜索引擎?

    看见知乎上如何用好Google搜索的问题(http://www.zhihu.com/question/20161362),整理一下.感谢知乎大神 1.Choose Which Google? HTTP ...

  9. HTTP和HTTPS以及两者的区别

    HTTP:是互联网上的应用广泛的一种网络协议,是一个客户端和服务器端请求和应答的传输协议,它可以使浏览器更加高效,使网络传输减少. HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版, ...

  10. matlab callback 数据传递

    M文件中内的每个Callback都可以视为一个独立的可执行的接口,因此,任一个Callback触发后所执行的运算值若要在其他Callback中使用,就无法与MATLAB工作空间内的变量继续执行操作,也 ...