[SDOI2018]原题识别
题解:
。。感觉挺烦得 而且我都没有注意到树随机这件事情。。
就写个30分的莫队。。
#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
namespace IO{
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T>void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
char sr[<<],z[]; int Z,CC=-;
template<class T>void wer(T x)
{
if (x<) sr[++CC]='-',x=-x;
while (z[++Z]=x%+,x/=);
while (sr[++CC]=z[Z],--Z);
}
IL void wer1()
{
sr[++CC]=' ';
}
IL void wer2()
{
sr[++CC]='\n';
}
template<class T>IL void mina(T &x,T y) { if (x>y) x=y;}
template<class T>IL void maxa(T &x,T y) { if (x<y) x=y;}
template<class T>IL T MIN(T x,T y){return x<y?x:y;}
template<class T>IL T MAX(T x,T y){return x>y?x:y;}
};
using namespace IO;
unsigned int SA, SB, SC;
unsigned int rng61(){
SA ^= SA << ;
SA ^= SA >> ;
SA ^= SA << ;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
const int N=4.1e5;
int l,head[N],n,m,c[N];
struct re{
int a,b,c,d;
}e[N],a[N];
IL void arr(int x,int y)
{
e[++l].a=head[x];
e[l].b=y;
head[x]=l;
}
IL void addedge(int x,int y)
{
arr(x,y); arr(y,x);
}
int p;
void gen(){
cin>>n>>p>>SA>>SB>>SC;
l=; me(head);
for(int i = ; i <= p; i++)
addedge(i - , i);
for(int i = p + ; i <= n; i++)
addedge(rng61() % (i - ) + , i);
for(int i = ; i <= n; i++)
c[i] = rng61() % n + ;
}
int cnt,dfn1[N],dfn2[N],dep[N],block,num,pos[N];
int bz[][N],ans[N],jl[N],ans2,po[N],b[N];
void dfs(int x,int y)
{
bz[][x]=y; dep[x]=dep[y]+; dfn1[x]=++cnt;
b[cnt]=x;
for (rint u=head[x];u;u=e[u].a)
{
int v=e[u].b;
if (v!=y) dfs(v,x);
}
dfn2[x]=++cnt; b[cnt]=x;
}
void change(int x,int k)
{
x=b[x]; int o;
jl[x]+=k;
if (jl[x]==) o=; else o=-;
if (ans[c[x]]>) ans2--;
ans[c[x]]+=o;
if (ans[c[x]]>) ans2++;
}
int lca(int x,int y)
{
if (dep[x]<dep[y]) swap(x,y);
dep(i,,)
if (dep[bz[i][x]]>=dep[y])
x=bz[i][x];
if (x==y) return(x);
dep(i,,)
if (bz[i][x]!=bz[i][y])
x=bz[i][x],y=bz[i][y];
return bz[][x];
}
bool cmp(re x,re y)
{
int k1=pos[x.a],k2=pos[y.a];
return k1<k2||(k1==k2&&x.b<y.b);
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
int T,m;
cin>>T;
while (T--)
{
me(ans); me(jl); cnt=; ans2=;
gen();
dfs(,);
rep(i,,)
rep(j,,n)
bz[i][j]=bz[i-][bz[i-][j]];
cin>>m;
rep(i,,m)
{
int kk,x,y;
cin>>kk>>x>>y;
int k=lca(x,y);
if (k!=x&&k!=y)
{
if (dfn1[x]>dfn1[y]) swap(x,y);
a[i].a=dfn2[x],a[i].b=dfn1[y];
a[i].c=k;
} else
{
if (y==k) swap(x,y);
a[i].a=dfn1[x],a[i].b=dfn1[y];
a[i].c=;
}
a[i].d=i;
}
int n1=*n;
block=sqrt(n1);
num=(n1-)/block+;
rep(i,,n1) pos[i]=(i-)/block+;
sort(a+,a+m+,cmp);
rep(i,,m)
{
if (a[i].a<=a[i-].a)
rep(j,a[i].a,a[i-].a-) change(j,);
if (a[i].b>=a[i-].b)
rep(j,a[i-].b+,a[i].b) change(j,);
if (a[i].a>a[i-].a)
rep(j,a[i-].a,a[i].a-) change(j,-);
if (a[i].b<a[i-].b)
rep(j,a[i].b+,a[i-].b) change(j,-);
if (a[i].c)
{
if (ans[c[a[i].c]]==) po[a[i].d]=ans2+;
else po[a[i].d]=ans2;
} else po[a[i].d]=ans2;
}
rep(i,,m) wer(po[i]),wer2();
}
fwrite(sr,,CC+,stdout);
return ;
}
[SDOI2018]原题识别的更多相关文章
- #LOJ2564 SDOI2018 原题识别 主席树
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/9057297.html 原题链接: 今天考试考了前天的SDOI考题 天啊我菜爆,只有T2拿了30分 然后考试后半 ...
- SDOI2018:原题识别
题解: https://files.cnblogs.com/files/clrs97/old-solution.pdf Code: #include<cstdio> #include< ...
- [CF676C]Vasya and String(尺取法,原题)
题目链接:http://codeforces.com/contest/676/problem/C 原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.ht ...
- (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)
刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...
- NOIP2016原题终结测试(2017081801)
NOIP2016还有几道原题没有写掉,今天就一并布置掉. 答案的问题,有部分会先放到NOIP题解中,是单独发布的. 最后会汇总放在答案中,各位不要急. 还有,后期会有原创题测试,这个不急,反正11月才 ...
- 2019.3.16 noiac的原题模拟赛
RT,这太谔谔了,我不承认这是模拟赛 但是虽然是搬了三道题,题目本身也还能看,就这么着吧 (怎么机房里就我一道原题都没做过啊 T1 CF24D Broken Robot 比较简单地列出式子之后,我们发 ...
- 浅谈《剑指offer》原题:不使用条件、循环语句求1+2+……+n
转载自:浅谈<剑指offer>原题:求1+2+--+n 如侵犯您的版权,请联系:windeal12@qq.com <剑指offer>上的一道原题,求1+2+--+n,要求不能使 ...
- P1048 采药(洛谷,动态规划递推,01背包原题)
题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...
- NOIP原题 斗地主(20190804)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...
随机推荐
- 在windows下用vagrant建立lnmp开发环境
1.安装vagrant,vitrualbox 2.下载homestead的box包,并添加到vagrant 下载地址: https://atlas.hashicorp.com/laravel/boxe ...
- HTTP协议05-Web服务器
1)用单台虚拟主机实现多个域名 HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点.比如,提供Web托管服务的供应商,可以用一台服务器为多位客户服务,也可以以每位客户持有的域名运行各自不同的 ...
- oracle procedure存储过程
1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS/AS 变量1 ; 变量2 DATE: BEG ...
- python迭代器的说明
data = [randint(0,20) for _ in xrange(30)]表示30个随机生成的0-20随机数其中for _ in xrange(30)表示循环30次. from random ...
- Light OJ 1214
简单大数模拟题: #include<bits/stdc++.h> using namespace std; typedef long long ll; string Num; vector ...
- MicroPython的开发板
比如: pyboard micro:bit ESP8266/ESP32 stm32等等 什么是pyboard? pyboard是官方的MicroPython微控制器板,完全支持软件功能.硬件有: ST ...
- PyJWT 使用
最近要用 Falsk 开发一个大点的后端,为了安全考虑,弃用传统的Cookie验证.转用JWT. 其实 Falsk 有一个 Falsk-JWT 但是我觉得封装的太高,还是喜欢通用的 PyJWT . J ...
- javaweb web.xml文件详解
web.xml文件详解 前言:一般的web工程中都会用到web.xml,web.xml主要用来配置,可以方便的开发web工程.web.xml主要用来配置Filter.Listener.Servlet等 ...
- 在线HTTP POST/GET接口测试工具 - aTool在线工具
百度搜索标题或直接访问网址如下 网址:http://www.atool.org/httptest.php 很好用的在线http get/post 测试工具
- Java学习——面向对象【3】
1. 继承 java的类是单继承(一个子类只能继承一个父类),不能多继承(多个父类):A继承自B,A也继承自C,可以多重继承,就是A继承自B,B继承自C(A->B->C), 所有的类都继 ...