日期:

八月七号

 总分:

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. Python——数据类型

    如果是C语言,Java使用一个变量之前需要声明,数字,字符,布尔等都有特定的声明方式,前端中常用的js中都要使用var,而python中直接用就行了 比如: 虽然是这样使用,但其实是当你给一个变量赋值 ...

  2. cocos2dx 字体描边遇到的描边缺失的bug

    在cocos中,设置字体描边可以用enableOutline(cc.c4b(30, 10, 0, 255), 2)函数设置,第一个参数是字体颜色,第二个参数是描边轮廓大小,单位是2个像素, 我在使用过 ...

  3. 几种排序算法的比较转自http://blog.csdn.net/keenweiwei/article/details/3697452

    1冒泡排序: 已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先找出这组数据中最大值,将a[1]与a[2]比较,若a[1]大,则交换两者的值,否则不变,在 ...

  4. Template 基础篇-函数模板(待看

    Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...

  5. 【思维题 状压dp】APC001F - XOR Tree

    可能算是道中规中矩的套路题吧…… Time limit : 2sec / Memory limit : 256MB Problem Statement You are given a tree wit ...

  6. nodejs开发过程中遇到的一些插件记录

    1.chalk Github:https://github.com/chalk/chalk   终端样式定制插件,可自定义输出日志的样式. 1.semver   管网:https://semver.o ...

  7. OOP面向对象形式的初使化配置

    init.php里: <?php use ElemeOpenApi\Config\Config; define("BASE_DIR", dirname(__FILE__) . ...

  8. LeetCode(215) Kth Largest Element in an Array

    题目 Find the kth largest element in an unsorted array. Note that it is the kth largest element in the ...

  9. Power Calculus UVA - 1374 迭代加深搜索

    迭代加深搜索经典题目,好久不做迭代加深搜索题目,拿来复习了,我们直接对当前深度进行搜索,注意剪枝,还有数组要适当开大,因为2^maxd可能很大 题目:题目链接 AC代码: #include <i ...

  10. BZOJ 5215: [Lydsy2017省队十连测]商店购物

    裸题 注意+特判 #include<cstdio> using namespace std; const int mod=1e9+7; int F[1000005],mi[10000005 ...