Information Graph

本文介绍了一种解决员工文件处理问题的方法,通过离线处理和图论算法,实现对公司内部员工间的文件传递过程的有效跟踪及查询。文章详细阐述了使用并查集维护员工关系、广度优先搜索构建员工层级结构以及利用最近公共祖先算法判断文件是否被指定员工签署。

题意

有 n 个雇员在公司 “X” 工作 (为方便考虑,将他们从 1 到 n 编号)。最初,雇员之间没有任何关系。在接下来的每 m 天中,每天发生以下事件中的一件:

要么雇员 y 变成雇员 x 的上司 (那时,雇员 x 尚未拥有一个上司);
要么雇员 x 取得一小包文件并签署它们,然后他将这一小包给了他的上司。他的上司签署了这些文件,并将它们给了更上一层的上司,依此类推 (签署文件的最后一人,将它们发送到归纳箱中);
要么类型为 “判断雇员 x 是否签署了特定的文件” 的一个请求到来。
您的任务是编写一个程序,给定这些事件的情况下,回答所描述类型的查询。在那时,数据保证:在整个工作时间,公司中没有循环依赖。

分析

这道题我们可以采用离线处理

首先我我们先去建图,在建图的过程中如果遇到了文件传输的话,我们记录每一个文件的起点和终点,起点比较好确定,就是我输入的数值,那么怎么去确认终点呢?我们可以去维护一个并查集

然后我们去处理每一个询问,其实就是去判断询问的点是不是在对应的那条路径上面,我们已经有了起点,终点,待判断的点,可以用最近公公祖先去处理这个问题,待判断的点和起点的LCA为他本身,待判断的点和终点的LCA为终点,同时记得判断一下三点个是否在同一个联通快内部即可

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define _CRT_SECURE_NO_WARNINGS
#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")
#pragma GCC option("arch=native","tune=native","no-zero-upper")
#pragma GCC target("avx2")
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 10;
int h[N],ne[N],e[N],idx;
int f[N][21];
int res;
int line1[N],line2[N];
int q[N];
int d[N];
int ppp[N];
int qid[N];
int n,m,num;

void add(int a,int b){
    ne[idx] = h[a],e[idx] = b,h[a] = idx++;
}

int find(int x){
    if(x != q[x]) q[x] = find(q[x]);
    return q[x]; 
}

void bfs(int root){
    d[0] = 0,d[root] = 1;
    queue<int> Q;
    Q.push(root);
    while(Q.size()){
        int t = Q.front();
        Q.pop();
        for(int i = h[t];~i;i = ne[i]){
            int j = e[i];
            if(d[j] > d[t] + 1){
                d[j] = d[t] + 1;
                Q.push(j);
                f[j][0] = t;
                for(int k = 1;k <= 20;k++)
                    f[j][k] = f[f[j][k - 1]][k - 1];
            }
        }
    }
}

int LCA(int a,int b){
    if(d[a] < d[b]) swap(a,b);
    for(int i = 20;i >= 0;i--)
        if(d[f[a][i]] >= d[b])
            a = f[a][i];
    if(a == b) return a;
    for(int i = 20;i >= 0;i--)
        if(f[a][i] != f[b][i])
            a = f[a][i],b = f[b][i];
    return f[a][0];
}

int main(){
    scanf("%d%d",&n,&m);
    memset(h,-1,sizeof h);
    for(int i = 1;i <= n;i++) q[i] = i;
    while(m--){
        int op,x,y;
        scanf("%d",&op);
        if(op == 1){
            scanf("%d%d",&x,&y);
            add(y,x);
            q[x] = find(y);
        }
        else if(op == 2){
            scanf("%d",&x);
            line1[++res] = x;
            line2[res] = find(x);
        }
        else{
            scanf("%d%d",&x,&y);
            ppp[++num] = x;
            qid[num] = y;
        }
    }
    memset(d,0x3f,sizeof d);
    for(int i = 1;i <= n;i++)
        if(q[i] == i)
            bfs(i);
    for(int i = 1;i <= num;i++){
        int id = qid[i],x = ppp[i];
        int st = line1[id],ed = line2[id];
        int a = find(st),b = find(ed),c = find(x);
        if(a != b || b != c || a != c){
            puts("NO");
            continue;
        }
        if(LCA(st,x) == x && LCA(x,ed) == ed) 
            puts("YES");
        else
            puts("NO");
    }
}

/**
*  ┏┓   ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃       ┃
* ┃   ━   ┃ ++ + + +
*  ████━████+
*  ◥██◤ ◥██◤ +
* ┃   ┻   ┃
* ┃       ┃ + +
* ┗━┓   ┏━┛
*   ┃   ┃ + + + +Code is far away from  
*   ┃   ┃ + bug with the animal protecting
*   ┃    ┗━━━┓ 神兽保佑,代码无bug 
*   ┃        ┣┓
*    ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛ + + + +
*    ┃┫┫ ┃┫┫
*    ┗┻┛ ┗┻┛+ + + +
*/

潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值