首页 > 其他分享 >dan

dan

时间:2024-10-05 19:33:38浏览次数:5  
标签:ch return int dan char dfn top

点击查看代码
/*
GGrun
*/
#include<bits/stdc++.h>
using namespace std;
namespace Octane {
    //non terrae plus ultra dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #define OCTANE // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #define BUFFER_SIZE 100000 // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #define ll long long // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #define db double // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #define ldb long double // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    char ibuf[100000], obuf[100000], *p1=ibuf,*p2=ibuf,*p3=obuf;
    #ifdef ONLINE_JUDGE//dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #define getchar() ((p1==p2) and (p2=(p1=ibuf)+fread(ibuf,1,\
    BUFFER_SIZE,stdin),p1==p2)?(EOF):(*p1++)) // dqrdqrdqrdqrdqr
    #define putchar(x) ((p3==obuf+BUFFER_SIZE) && (fwrite(obuf,\
    p3-obuf,1,stdout),p3=obuf),*p3++=x) // dqrdqrdqrdqrdqrdqrdqr
    #endif// fread in OJ, getchar in local dqrdqrdqrdqrdqrdqrdqr
    #define isdigit(ch) (ch>47&&ch<58)//dqrdqrdqrdqrdqrdqrdqrdqr
    #define isspace(ch) (ch<=32&&ch!=EOF)//dqrdqrdqrdqrdqrdqrdqr
    #define isseen(ch) (ch>32) // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    struct Octane_t{~Octane_t(){fwrite(obuf,p3-obuf, 1, stdout);
    }bool flag=false;operator bool(){return flag;} }io; template
    <typename T>inline T read(){T s=0; int w = 1; char ch; while
    (ch=getchar(), !isdigit(ch)&&(ch!=EOF))if(ch == '-') w = -1;
    if(ch == EOF) return 0; while(isdigit(ch)) s = s*10+ch-48,ch
    =getchar(); return s *= w; } template<typename T>inline bool
    read(T &s) { s = 0; int w = 1; char ch; while(ch = getchar()
    ,!isdigit(ch)&&(ch!=EOF))if(ch == '-') w = -1; if(ch == EOF)
    return false;while(isdigit(ch))s = s*10+ch-48, ch=getchar();
    return s*=w,true;}inline bool read(char &s){while(s= getchar
    (), isspace(s)); return s != EOF; } inline bool read(char *s
    ){char ch=getchar();while(isspace(ch))ch= getchar();if(ch ==
    EOF)return false;while(isseen(ch)) *s++ = ch, ch= getchar();
    *s='\000';return true;}template<typename T> void printv(T a)
    {if(a== 0){ putchar('0'); return void(); }static char st[65]
    ; int top = 0; if (a < 0) putchar ('-'), a = - a; while(a)st
    [++top]='0'+a%10,a/=10;while(top)putchar(st[top--]);} inline
    void printv(char c){putchar(c);}inline void printv(char *s){
    for(int i=0;s[i];i++)putchar(s[i]);}inline void printv(const
    char *s){ for(int i=0;s[i];i++) putchar(s[i]); } inline void
    printv(bool a){ if(a != 0)putchar('1'); else putchar('0'); }
    #ifdef _GLIBCXX_STRING // support for string dqrdqrdqrdqrdqr
    inline bool read(std::string& s) { s = ""; char ch; while(ch
    =getchar(), isspace(ch)); if(ch == EOF) return false; while(
    !isspace(ch)) s+=ch,ch=getchar(); return true; } inline bool
    getline(Octane_t &io,std::string s){s="";char ch= getchar();
    if(ch==EOF)return false;while(ch!='\n' and ch !=EOF)s+=ch,ch
    =getchar();return true;}inline void printv(const std::string
    &a){for(auto i = a.begin(); i != a.end(); ++i) putchar(*i);}
    #endif// dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    template<typename T>inline void print(const char *p,T first)
    { int n = strlen(p) - 1; for(int i = 0; i <= n; i++) { if(p[
    i] == '`') { putchar(p[++ i]); continue; } else if ( p[i] ==
    '{'){printv(first); i++; continue; } else putchar(p[i]); } }
    #if __cplusplus >= 201103L // support for many values dqrdqr
    template<typename T,typename... T1>inline int read(T& a, T1&
    ...other){return read(a)+read(other...); } inline void print
    (const char *p) { printv(p); }template<typename T1, typename
    ... T2>void print(const char*p, T1 first, T2 ...other) { int
    n=strlen(p)-1; for(int i = 0; i <= n; i++) { if(p[i] == '`')
    {putchar(p[++i]);continue;}else if(p[i]=='{'){printv(first);
    print(p+i+2,other...);return void();}else putchar(p[i]); } }
    #endif // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdq
    template <typename T> Octane_t& operator >> (Octane_t &io, T
    &b){return io.flag=read(b),io;}Octane_t& operator>>(Octane_t
    &io, char *b){return io.flag=read(b), io;} template<typename
    T>Octane_t&operator<<(Octane_t&io,T b){return printv(b),io;}
    #define cout io// dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #define cin io // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #define endl '\n' // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #undef ll// dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #undef db// dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
    #undef ldb//dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqr
} using namespace Octane;
// typedef long long ll;
// typedef unsigned long long ull;
typedef pair<int,int> pii;
#define mk make_pair
#define ps push_back
#define fi first
#define se second
const int N=1e5+10,inf=0x3f3f3f3f;
// const b linf=0x3f3f3f3f3f3f3f3f,mod=1e9+7;
int siz[N],fa[N],dep[N],dfn[N],son[N],top[N],tot;
int n,m,hd[N],cnt;
struct jj{
	int to,next;
}bi[N<<1];
inline void ad(int x,int y){bi[++cnt]={y,hd[x]},hd[x]=cnt,bi[++cnt]={x,hd[y]},hd[y]=cnt;}
inline void dfs1(int x,int f){
	dep[x]=dep[f]+1;fa[x]=f;siz[x]=1;
	for(int i=hd[x];i;i=bi[i].next){
		int j=bi[i].to;
		if(j!=f){
			dfs1(j,x);siz[x]+=siz[j];
			siz[j]>siz[son[x]]?son[x]=j:0;
		}
	}
}
inline void dfs2(int x,int zu){
	top[x]=zu;dfn[x]=++tot;
	if(son[x])dfs2(son[x],zu);
	for(int i=hd[x];i;i=bi[i].next){
		int j=bi[i].to;
		if(!dfn[j])dfs2(j,j);
	}
}
int sz[N<<2],tag[N<<2];
bool t0[N<<2];
inline void qing(int k,int l,int r,int L,int R){
	if(L<=l&&r<=R)return (void)(sz[k]=0,t0[k]=1,tag[k]=0);
	int mid=l+r>>1;
	if(t0[k])sz[k<<1]=sz[k<<1|1]=0,t0[k<<1]=t0[k<<1|1]=1,tag[k<<1]=tag[k<<1|1]=0,t0[k]=0;
	if(tag[k]){sz[k<<1]+=tag[k]*(mid-l+1),sz[k<<1|1]+=tag[k]*(r-mid),tag[k<<1]+=tag[k],tag[k<<1|1]+=tag[k],tag[k]=0;}
	if(L<=mid)qing(k<<1,l,mid,L,R);
	if(R>mid)qing(k<<1|1,mid+1,r,L,R);
	sz[k]=sz[k<<1]+sz[k<<1|1];
}
inline void add(int k,int l,int r,int L,int R){
	if(L<=l&&r<=R)return (void)(sz[k]+=(r-l+1),++tag[k]);
	int mid=l+r>>1;
	if(t0[k])sz[k<<1]=sz[k<<1|1]=0,t0[k<<1]=t0[k<<1|1]=1,tag[k<<1]=tag[k<<1|1]=0,t0[k]=0;
	if(tag[k]){sz[k<<1]+=tag[k]*(mid-l+1),sz[k<<1|1]+=tag[k]*(r-mid),tag[k<<1]+=tag[k],tag[k<<1|1]+=tag[k],tag[k]=0;}
	if(L<=mid)add(k<<1,l,mid,L,R);
	if(R>mid)add(k<<1|1,mid+1,r,L,R);
	sz[k]=sz[k<<1]+sz[k<<1|1];
}
inline int ask(int k,int l,int r,int L,int R){
	if(L<=l&&r<=R)return sz[k];
	int mid=l+r>>1,ans=0;
	if(t0[k])sz[k<<1]=sz[k<<1|1]=0,t0[k<<1]=t0[k<<1|1]=1,tag[k<<1]=tag[k<<1|1]=0,t0[k]=0;
	if(tag[k]){sz[k<<1]+=tag[k]*(mid-l+1),sz[k<<1|1]+=tag[k]*(r-mid),tag[k<<1]+=tag[k],tag[k<<1|1]+=tag[k],tag[k]=0;}
	if(L<=mid)ans=ask(k<<1,l,mid,L,R);
	if(R>mid)ans+=ask(k<<1|1,mid+1,r,L,R);
	return ans;
}
set<pii> s;
int man=0;
inline void add(int x,int y){
	vector<pii> v,vdo;
	while(top[x]!=top[y]){
		if(dep[top[x]]>dep[top[y]])swap(x,y);
		if(son[y])qing(1,1,n,dfn[top[y]],dfn[son[y]]);
		else qing(1,1,n,dfn[top[y]],dfn[y]);
		auto i1=s.lower_bound({dfn[top[y]],0}),i2=s.upper_bound({dfn[y],n});
		for(auto i=i1;i!=i2;++i){
			qing(1,1,n,(*i).se,(*i).se);
		}
		if(i1!=i2)s.erase(i1,i2);
		vdo.ps({dfn[top[y]],dfn[y]}); 

		v.ps({dfn[fa[top[y]]],dfn[top[y]]});
		y=fa[top[y]];
	}
	if(dep[x]>dep[y])swap(x,y);
	if(son[y])qing(1,1,n,dfn[x],dfn[son[y]]);
	else qing(1,1,n,dfn[x],dfn[y]);
	auto i1=s.lower_bound({dfn[x],0}),i2=s.upper_bound({dfn[y],n});
	for(auto i=i1;i!=i2;++i){
		qing(1,1,n,(*i).se,(*i).se);
	}
	if(i1!=i2)s.erase(i1,i2);
	if(x!=y)add(1,1,n,dfn[x]+1,dfn[y]);
	for(auto i:vdo){
		add(1,1,n,i.fi,i.se);
	}
	s.insert(v.begin(), v.end());
}
inline int ask(int x,int y){
	int ans=0;
	while(top[x]!=top[y]){
		if(dep[top[x]]>dep[top[y]])swap(x,y);
		ans+=ask(1,1,n,dfn[top[y]],dfn[y]);
		y=fa[top[y]];
	}
	if(dep[x]>dep[y])swap(x,y);
	if(x!=y)ans+=ask(1,1,n,dfn[x]+1,dfn[y]);
	return ans;
}
#define fl(x) (fill(x+1,x+1+n,0))
signed main(){
	#ifndef ONLINE_JUDGE
	freopen("in.in","r",stdin);
	freopen("out.out","w",stdout);
	#endif
	// ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t;
	cin>>t;
	// cout<<t<<endl;
	// double ti=clock();
	while(t--){
		cin>>n>>m;
		if(t!=2){qing(1,1,n,1,n);fill(hd+1,hd+1+n,0);cnt=0;tot=0;fill(son+1,son+1+n,0);s.clear();fl(dfn);}
		for(int i=1,x,y;i<n;++i){
			cin>>x>>y;
			ad(x,y);
		}
		dfs1(1,0);dfs2(1,1);
		for(int i=1,op,x,y;i<=m;++i){
			cin>>op>>x>>y;
			if(op==1)add(x,y);
			else {
				cout<<ask(x,y)<<'\n';
				// return 0;
			}
		}
	}
	// cout<<man<<endl;
	// cout<<(clock()-ti)<<endl;
}

标签:ch,return,int,dan,char,dfn,top
From: https://www.cnblogs.com/GGrun-sum/p/18448334

相关文章

  • 《The Graceful Dance of Fog》
    《TheGracefulDanceofFog》 Fog,likeanetherealwhitesilk,quietlyblanketstheexpanseofheavenandearth.Itresemblesamysteriousdancer,movinginsilenceandenshroudingthewholeworldinitsdreamlikeembrace. "Thefogentwinesaround......
  • Python使用最广泛的数据验证库Pydantic
    Pydantic是Python使用最广泛的数据验证库。快速且可扩展,Pydantic与您的林特/IDE/大脑很好地搭配。定义数据应该如何在纯、规范的Python3.8+中;使用Pydantic验证它。 https://docs.pydantic.dev/latest/例子:fromdatetimeimportdatetimefromtypingimportTuplefro......
  • 基于SqlAlchemy+Pydantic+FastApi的Python开发框架的路由处理
    在前面随笔《基于SqlAlchemy+Pydantic+FastApi的Python开发框架 》中介绍了框架总体的内容,其中主要的理念就是通过抽象接口的方式,实现代码的重用,提高开发效率。本篇随笔深入介绍一下FastApi的路由处理部分的内容,通过基类继承的方式,我们可以简化路由器(或者叫WebAPI控制器)的基础......
  • 大模型项目部署时Gradio Web页面打不开或者打开用不了及pydantic.errors.PydanticSche
    问题描述 在复现大模型demo时连接器和模型加载都没问题,但是gradio界面打不开或者打开后用不了原因分析:感觉应该是gradio的版本问题导致该文件缺少相关文件解决方案:可以首先按照上面要求下载文件https://cdn-media.huggingface.co/frpc-gradio-0.2/frpc_linux_a......
  • 用于将日期时间表示为日期和时间的 Pydantic 模型
    我为日期时间创建了一个Pydantic模型,它将处理解析一个类似于{"date":"2021-07-01","time":"12:36:23"}的JSON对象datetime(2021,7,1,12,36,23)它还为模型生成正确的JSON架构。classTimestampWithSplit(RootModel):root:datetime......
  • 基于父模型归档的 Pydantic 联合判别器
    我有这样的模型:classFoo(BaseModel):protocol:strprotocol_params:Union[ProtocolOneParam,ProtocolTwoParam]ProtocolOneParam和ProtocolTwoParam没有具有可区分值的相同字段,因此我可以将它们用作Discriminator,而我可以理解哪个模......
  • 基于SqlAlchemy+Pydantic+FastApi的Python开发框架
    随着大环境的跨平台需求越来越多,对与开发环境和实际运行环境都有跨平台的需求,Python开发和部署上都是跨平台的,本篇随笔介绍基于SqlAlchemy+Pydantic+FastApi的Python开发框架的技术细节,以及一些技术总结。最近这几个月一直忙于Python开发框架的整合处理,将之前开发框架中很多重要......
  • 算法学习-Dancing Links X
    DancingLinksX舞蹈链。实质为用循环十字链在图上将所有“1”的位置链起来构造较为巧妙,且极易理解,本题为DLX模板(精确覆盖问题)DLX算法的题目做法一般为将所求方案转化为行号,将限制条件转化为列号然后dfs暴力枚举,用循环十字链优化/*Finishedat12:14on2024.4.5*/#......
  • C#——LINQ to XML(使用 Descendants 方法查找单个子代)
    xml位于命名空间中时查找staticvoidMain(string[]args){XElementroot=XElement.Parse(@"<aw:Rootxmlns:aw='http://www.efun.com'><aw:Child1><aw:GrandChild1>GC1Value</aw:GrandChild1>&l......
  • 借助GPT,仿真Pydantic主题讲解
    材料处理原始链接:https://pycoders.com/link/13271/web使用r.jina.ai获得其Markdown:https://r.jina.ai/https://realpython.com/courses/pydantic-simplify-data-validation/提取主题部分,构成一个Prompt这是一份Pydantic的主题目录,1.提取Markdown里主要的列表,忽略url2......