【LCT】BZOJ2049 [Sdoi2008]Cave 洞穴勘测

本文介绍了一道LCT模板题的解决方法,通过判断两节点是否属于同一树根来确定连通性。利用均摊深度logn的特性进行暴力查找,并提供了完整的示例代码。

题面在这里

LCT模板题,没什么好说的

判断是否联通只需要判断根是否相同即可

暴力往上找根是可行的,因为树的均摊深度是 logn l o g n

示例程序:

#include<cstdio>
#include<algorithm>
using namespace std;
inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline char fstchar(){
    char ch=nc();while (ch<'A'||'Z'<ch) ch=nc();
    return ch;
}
inline int red(){
    int res=0,f=1;char ch=nc();
    while (ch<'0'||'9'<ch) {if (ch=='-') f=-f;ch=nc();}
    while ('0'<=ch&&ch<='9') res=res*10+ch-48,ch=nc();
    return res*f;
}

const int maxn=10005;
int n,q;
int s[maxn][2],fa[maxn];
bool flp[maxn];
#define isroot(x) (s[fa[x]][0]!=x&&s[fa[x]][1]!=x)
inline void addflip(int x) {swap(s[x][0],s[x][1]),flp[x]^=1;}
inline void pushdown(int x) {if (flp[x]) flp[x]^=1,addflip(s[x][0]),addflip(s[x][1]);}
inline void rotate(int x){
    int f=fa[x],g=fa[f],d=s[f][0]==x;
    if (!isroot(f)) s[g][s[g][1]==f]=x; fa[x]=g;
    s[f][d^1]=s[x][d]; fa[s[x][d]]=f;
    s[x][d]=f; fa[f]=x;
}
int stk[maxn],top;
inline void splay(int x){
    top=0;stk[++top]=x;
    for (int i=x;!isroot(i);i=fa[i]) stk[++top]=fa[i];
    while (top) pushdown(stk[top--]);
    while (!isroot(x)){
        int f=fa[x],g=fa[f],d=s[f][0]==x,dd=s[g][0]==f;
        if (!isroot(f))
         if (d==dd) rotate(f),rotate(x);
         else rotate(x),rotate(x);
        else rotate(x);
    }
}
inline void access(int x) {for (int t=0;x;t=x,x=fa[x]) splay(x),s[x][1]=t;}
inline void mr(int x) {access(x);splay(x);addflip(x);}
inline int sfa(int x) {while (fa[x]) x=fa[x];return x;}
inline void join(int x,int y) {mr(x);fa[x]=y;}
inline void cut(int x,int y) {mr(x);access(y);splay(y);fa[x]=s[y][0]=0;}
int main(){
    n=red(),q=red();
    while (q--){
        char c=fstchar();int x=red(),y=red();
        if (c=='Q') printf(sfa(x)==sfa(y)?"Yes\n":"No\n");else
        if (c=='C') join(x,y);else cut(x,y);
    }
    return 0;
}
本系统旨在构建一套面向高等院校的综合性教务管理平台,涵盖学生、教师及教务处三个核心角色的业务需求。系统设计着重于实现教学流程的规范化与数据处理的自动化,以提升日常教学管理工作的效率与准确性。 在面向学生的功能模块中,系统提供了课程选修服务,学生可依据培养方案选择相应课程,并生成个人专属的课表。成绩查询功能支持学生查阅个人各科目成绩,同时系统可自动计算并展示该课程的全班最高分、平均分、最低分以及学生在班级内的成绩排名。 教师端功能主要围绕课程与成绩管理展开。教师可发起课程设置申请,提交包括课程编码、课程名称、学分学时、课程概述在内的新课程信息,亦可对已开设课程的信息进行更新或撤销。在课程管理方面,教师具备录入所授课程期末考试成绩的权限,并可导出选修该课程的学生名单。 教务处作为管理中枢,拥有课程审批与教学统筹两大核心职能。课程设置审批模块负责处理教师提交的课程申请,管理员可根据教学计划与资源情况进行审核批复。教学安排模块则负责全局管控,包括管理所有学生的选课最终结果、生成包含学号、姓名、课程及成绩的正式成绩单,并能基于选课与成绩数据,统计各门课程的实际选课人数、最高分、最低分、平均分以及成绩合格的学生数量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值