首页 > 其他分享 >猎奇码风

猎奇码风

时间:2022-11-18 21:00:53浏览次数:58  
标签:int top son maxn 码风 猎奇 reg

题目:QTREE6 - Query on a tree VI

去掉快读只有四十行。

#include<bits/stdc++.h>
#define EL puts("Elaina")
#define reg register int
using namespace std;
namespace IO{
	const int siz=1<<18;char buf[siz],*p1,*p2;
	inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,siz,stdin),p1==p2)?EOF:*p1++;}
	inline int read(){
		int x=0;char ch=getc();
		while(!isdigit(ch))ch=getc();
		while(isdigit(ch))x=x*10+(ch^48),ch=getc();
		return x;
	}
}using IO::read;
const int maxn=1e5+3;
struct{int to,next;}e[maxn<<1];
int len,head[maxn],siz[maxn],son[maxn],fa[maxn],top[maxn],dfn[maxn],raw[maxn],ti;
inline void insert(int from,int to){e[++len].to=to,e[len].next=head[from],head[from]=len;}
inline void dfs1(int u){
	for(reg i=(siz[u]=1,head[u]),v;i;i=e[i].next)
		if((v=e[i].to)^fa[u]&&(fa[v]=u,dfs1(v),siz[u]+=siz[v],siz[v]>siz[son[u]]))son[u]=v;
}
set<int> S[2][maxn];
inline void dfs2(int u,int t){
	raw[*S[0][top[u]=t].insert(dfn[u]=++ti).first]=u;
	if(son[u]&&(dfs2(son[u],t),1))for(reg i=head[u],v;i;i=e[i].next)if((v=e[i].to)^fa[u]&&v^son[u])dfs2(v,v);
}
int n,rof[2][maxn];bool col[maxn];
struct BIT{
	int t[maxn];
	inline void update(int i,int x){if(i)while(i<=n)t[i]+=x,i+=i&-i;}
	inline int query(int i){int ans=0;while(i)ans+=t[i],i^=i&-i;return ans;}
	inline int size(int u){return query(dfn[u]+siz[u]-1)-query(dfn[u]-1);}
}t[2];
inline int ancestor(int u){
	int x=u,y,z;while(x&&rof[col[u]^1][top[x]]>dfn[x])x=fa[y=top[x]];
	return x?(z=raw[*--S[col[u]^1][top[x]].upper_bound(dfn[x])])==x?y:son[z]:1;
}
inline void MyDearMoments(){
	for(reg i=(n=read(),1),x,y;i<n;++i)insert(x=read(),y=read()),insert(y,x);
	for(reg i=(dfs1(1),dfs2(1,1),1);i<=n;++i)t[0].t[i]=i&-i,t[1].update(dfn[i],1),t[1].update(dfn[fa[i]],-1);
	for(reg i=1;i<=n;++i)if(top[i]==i)rof[1][i]=INT_MAX,rof[0][i]=dfn[i];
	for(reg Q=read(),opt,u,y,z;Q--;)if(opt=read(),u=read(),opt){
		t[col[u]].update(dfn[fa[u]],z=-t[col[u]].size(u)),t[col[u]].update(dfn[fa[(y=ancestor(u))^1&&(y=fa[y]),y]],-z);
		S[col[u]][y=top[u]].erase(dfn[u]),rof[col[u]][y]=S[col[u]][y].size()?*S[col[u]][y].begin():INT_MAX;
		S[col[u]^=1][y].insert(dfn[u]),rof[col[u]][y]=*S[col[u]][y].begin();
		t[col[u]].update(dfn[fa[u]],z=t[col[u]].size(u)),t[col[u]].update(dfn[fa[(y=ancestor(u))^1&&(y=fa[y]),y]],-z);
	}else printf("%d\n",t[col[u]].size(ancestor(u)));
}
int main(){return MyDearMoments(),0;}

可以使代码行数显著减少,并且这种码风码量也会少一些,思维更加密集连贯。

缺点:没有容错率,很难调。信息熵较大而可读性较低。

标签:int,top,son,maxn,码风,猎奇,reg
From: https://www.cnblogs.com/muel-imj/p/16904877.html

相关文章

  • 关于主播码风
    众所周知,全机房码风最臭的那位就是我,机房里几乎没有人认可我的码风。从不压行,能写两行绝对不写一行例:while(1);while(1){ ;}缺省源跟上边这条冲突。intre......
  • 个人码风介绍
    个人码风介绍//不向焦虑与抑郁投降,这个世界终会有我们存在的地方。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cassert>#in......
  • 代码风格改善
    代码风格改善googleguidestyle头文件头文件应该能够自给自足(self-contained,也就是可以作为第一个头文件被引入),以.h结尾。至于用来插入文本的文件,说到底它们并不是......
  • go打印hello world、go语言的注释、go语言的代码风格、go中文api文档
    go打印helloworld打开自己存放go代码的项目文件夹main,在main下面新建一个test.go文件1.在文件中输入以下代码:packagemain//声明该文件所在的包,每个go文件必须有其归......
  • 论Python代码风格与编程习惯的重要性
    小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。引言实现高内聚,低耦合、结构清晰不臃肿、可读性高、数据冗余性低、高复用、易扩展的代码,并非易事。上到......
  • Solidity编码规范(代码风格)
    什么是编码规范编码规范指的是从代码的正确性、稳定性、可读性等方面识别出来的在编码过程中要遵循的规则,例如代码的排版规则,注释方法,函数、变量命名规则等。大厂几乎都......
  • 【我要做开源】Vue DevUI开源指南06:开源组件库中的CLI脚手架建设,再也不用担心重复工作
    脚手架是为了保证各施工过程顺利进行而搭设的工作平台。按搭设的位置分为外脚手架、里脚手架;按材料不同可分为木脚手架、竹脚手架、钢管脚手架;按构造形式分为立杆式脚手架、......
  • 大名鼎鼎的Requests库用了什么编码风格?
     原文:https://www.kennethreitz.org/essays/kenneth-reitzs-code-style作者:KennethReitz原题:KennethReitz’sCodeStyle™  Requests的代码库使用PEP-8编码风格。......
  • Visual Studio Code设置自己的C++代码风格
    VisualStudioCode使用Microsoft出品的C/C++插件,借助ClangFormat工具进行代码格式化。在设置(settings.json)中,可以自行修改代码格式化的样式,如:{"C_Cpp.clang_format_f......