dan

news/2024/12/31 2:03:19/文章来源:https://www.cnblogs.com/GGrun-sum/p/18448334
点击查看代码
/*
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 // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrchar 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) // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrstruct 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 boolread(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--]);} inlinevoid printv(char c){putchar(c);}inline void printv(char *s){for(int i=0;s[i];i++)putchar(s[i]);}inline void printv(constchar *s){ for(int i=0;s[i];i++) putchar(s[i]); } inline voidprintv(bool a){ if(a != 0)putchar('1'); else putchar('0'); }#ifdef _GLIBCXX_STRING // support for string dqrdqrdqrdqrdqrinline 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 boolgetline(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// dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrtemplate<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 dqrdqrtemplate<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) { intn=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 // dqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqrdqtemplate <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<typenameT>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_JUDGEfreopen("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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808644.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Burp功能 细解析

情境 第六周的培训甚是有趣, 更加详细的介绍了Burp工具的功能和使用细节. 虽然很有趣, 但是我学得很慢, 练习达到熟练掌握还需要练习. 以下是第五次培训的练习题 以及我的解答. 最后一题手生, 一开始没做出来.1、安装burp,分别在本机上实现全局代理和局部代理,提供设置过程的…

高级语言程序设计第二次作业(102400106刘鑫语)

这个作业属于课程:https://edu.cnblogs.com/campus/fzu/2024C/ 作业要求:https://edu.cnblogs.com/campus/fzu/2024C/homework/13282 学号:102400106 姓名:刘鑫语 程序清单 最初都很顺利 3.1 3.2 3.3 3.4 3.5 3.6 出现了问题但一直没能解决,回宿舍后试着改成c99 依然报错,…

快乐数学4弧度

4 弧度 我们大多数人都不知道为什么圆要有 360 度。在学习高等数学或物理时,我们会记住一个神奇的数字--“圆的大小”,并将自己设置为一个 “圆的360度”。 专家们说:“弧度让数学变得更简单!”但却没有简单的理由(涉及泰勒级数的讨论并不简单)。今天,我们将揭开弧度的真…

序列化器ser.validated_data、ser.initial_data、ser.data

class LoginPwdSerializer(serializers.Serializer):mobile = serializers.CharField(required=True, validators=[RegexValidator(r"\d{11}", message="格式错误")])password = serializers.CharField(required=True)def validate_mobile(self, value):ex…

12-网络安全审计技术原理与应用

12.1 概述 1)概念 :指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。 作用:在于建立“事后”安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线索及证据,以便于发现潜在的网络安全威胁行为,开展网络安全风险分析及管理。 …

林史语其十(101-111)【下半更新】

12345鉴于收集素材与发布素材之间有一定延迟,此后林史一章分两次更新 先把存的旧东西发一下 #101故事源于 joke3579 学长博客里一份证明,涉及到求不定积分的 如果你不知道啥是不定积分,你只需要知道它是导数逆运算就行了 学长博客里写的是 :\(A\) 求导后等于 \(B\) HDK:\(…

林史语其十(101-110)【下半更新】

12345鉴于收集素材与发布素材之间有一定延迟,此后林史一章分两次更新 先把存的旧东西发一下 #101故事源于 joke3579 学长博客里一份证明,涉及到求不定积分的 如果你不知道啥是不定积分,你只需要知道它是导数逆运算就行了 学长博客里写的是 :\(A\) 求导后等于 \(B\) HDK:\(…

CF 1805 D. A Wide, Wide Graph (*1800) 思维 + 树的直径

CF 1805 D. A Wide, Wide Graph (*1800) 思维 + 树的直径 题目链接 题意:思路: 若当前点到最远的点的距离 \(< k\) , 说明 \(x\) 自己成为一个联通块。 并且我们知道距离任意一点最远的点一定是树直径的一个端点。 反之,则与直径端点在同一个联通块。 所以一个点要么独立…

Windows应急响应-Auto病毒

Windows—Auto病毒应急思路分享。目录应急背景分析样本开启监控感染病毒查看监控分析病毒行为autorun.inf分析2.异常连接3.进程排查4.启动项排查查杀1.先删掉autorun.inf文件2.使用xuetr杀掉进程3.启动项删除重启排查入侵排查正常流程 应急背景 运维人员准备通过windows共享文档…

帝国cms后台admin帐号密码忘记的处理方法

5.1 至 7.0 版本登录 phpMyAdmin访问 http://yourdomain.com/phpmyadmin。 输入数据库用户名和密码登录。选择帝国CMS 安装所在的数据库在 phpMyAdmin 主界面中,找到并选择帝国CMS 使用的数据库。找到 phome_enewsuser 表在数据库中找到名为 phome_enewsuser 的表。 单击该表以…

[OI] 树链剖分

学的时候比较朦胧,现在不朦胧了,所以写一下 讲解 重儿子:一个节点的子树大小最大的儿子 轻儿子:非重儿子 重链:节点 -> 重儿子 -> 重儿子 .. 这样的链A beautiful Tree蓝线为重链可以发现,树上的所有节点一定属于且仅属于一个重链 首先要知道如何找重链 这很简单,…

忘记帝国cms网站后台登录密码和认证码如何找回

1. 准备重置脚本下载附件:下载提供的重置脚本文件。 将文件上传到网站根目录。2. 访问重置页面访问重置页面:访问 /e/update/resetuser.php。 默认密码为 123456,也可以在 resetuser.php 中修改这个密码。3. 重置密码输入密码:输入默认密码 123456。 跳转到重置密码页面。 …