2018.8.8 Noip2018模拟测试赛(二十一)
日期: |
八月七号 |
总分: |
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模拟测试赛(二十一)的更多相关文章
- 2018.8.7 Noip2018模拟测试赛(二十)
日期: 八月七号 总分: 300分 难度: 提高 ~ 省选 得分: 100分(呵呵一笑) 题目列表: T1:SS T2:Tree Game T3:二元运算 赛后反思: Emmmmmm…… 开 ...
- 2018.7.31 Noip2018模拟测试赛(十六)
日期: 七月最后一天 总分: 300分 难度: 提高 ~ 省选 得分: 30分(少的可怜) 我太弱了:(题目目录) T1:Mushroom追妹纸 T2:抵制克苏恩 T3:美味 失分分析:(QA ...
- 2018.8.6 Noip2018模拟测试赛(十九)
日期: 八月六号 总分: 300分 难度: 提高 ~ 省选 得分: 10分(MMP) 题目目录: T1:Tree T2:异或运算 T3:Tree Restoring 赛后反思: Emmmmm ...
- 2017.8.2 Noip2018模拟测试赛(十八)
日期: 八月二日 总分: 300分 难度: 提高 ~ 省选 得分: 40分(又炸蛋了!!) 题目列表: T1:分手是祝愿 T2:残缺的字符串 T3:树点涂色 赛后心得: 哎,T1求期望,放弃. ...
- 2017.8.1 Noip2018模拟测试赛(十七)
日期: 八月第一天 总分: 300分 难度: 提高 ~ 省选 得分: 100分(不应该啊!) 题目目录: T1:战争调度 T2:选数 T3:由乃的OJ 赛后心得: MMP,首先第一题花了大概 ...
- [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania
[2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...
- noi2019模拟测试赛(四十七)
noi2019模拟测试赛(四十七) T1与运算(and) 题意: 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...
- EZ 2018 05 04 NOIP2018 模拟赛(十二)
这次的试卷应该是激励我们一下的,链接 然后大家的分数就都很高,然后我就210被一群秒A T2的240大佬爆踩 掉了5rating但Rank竟然发杀了 X_o_r dalao && YZ ...
- EZ 2018 06 24 NOIP2018 模拟赛(二十)
很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...
随机推荐
- mongodb 导入导出
F:\Mongodb\bin>mongoexport.exe -h localhost:27017 -d proxy_db -c proxy_tb -o f:/p1.json 导出 -h 服务器 ...
- javaweb基础(22)_Servlet+JSP+JavaBean实战登陆
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- Java制作桌面弹球下载版 使用如鹏游戏引擎制作 包含2个精灵球同时弹动
package com.swift; import com.rupeng.game.GameCore; public class DesktopBouncingBall implements Runn ...
- 接口的定义——默认加public abstract默认全局常量;与继承不同,子类可以同时实现多个接口;抽象类实现接口;接口继承接口
一. 接口的定义 接口中定义的方法,全部都为抽象方法,默认加public abstract 接口中定义的变量,全部为全局常量,默认加public static final 二.与继承不同,子类可以同时 ...
- CentOS7系统引导顺序以及排障
引导顺序 UEFi或BIOS初始化,运行POST开机自检 选择启动设备 引导装载程序, centos7是grub2 加载装载程序的配置文件:/etc/grub.d/ /etc/default/gru ...
- Python正则表达式详解——re库
一.简介 1.1.相关链接 官方文档: Python2:https://docs.python.org/2/library/re.html Python3:https://docs.python.or ...
- POJ:1904-King's Quest
King's Quest Time limit15000 ms Case time limit2000 ms Memory limit65536 kB Description Once upon a ...
- 安装liteIDE on mac
download and install: http://sourceforge.net/projects/liteide/files/ 解决不能编译,没有自动完成的问题: http://stacko ...
- exe4j+Inno_setup打包java桌面应用
打开exe4j,这里有个注意点,就是欢迎界面下面的License,如果没有请到网上找一个序列号,否则生成的exe打开之后都会先弹出您未激活exe4j的警告!点击下一步 这里有两个选项,第一个是通常编译 ...
- 深入新版BS4源码 探索flex和工程化sass奥秘
你可能已经听说了一个“大新闻”:Bootstrap4 合并了代号为#21389的PR,宣布放弃支持IE9,并默认使用flexbox弹性盒模型.这标志着:1)前端开发全面步入“现代浏览器”的时代进一步来 ...