LCA-并查集+tarjan-poj2874

比较器和运算放大器-2 今天继续了解输入阻抗问题,观察下图:首先考虑在我们没有接运放时,A点输出电压为6V,当接入如图所示的阻抗时电压还是6V吗?共模电阻和红框内对地电阻并联,阻值变小,相当于5k,通过计算可以求得A点电压变为4V,这样A的值发生了改变,试想一下这样的信号接入到运放的两端是不是相当于比较的两端信号发生了改变,那结果一定会发生偏离。信号源一般内阻是不确定的,一般也不是很小,如果不想改变输入阻抗,那唯一的办法就是改变运放的内阻了,比如内阻改为100K,1M等,越大越好,是不是A点电压就会无限接近6V。 阅读详情

要先加距离再回溯,多组数据是真的坑。
题意:给你N个点、M条无向边以及边的长度,可能这些点和边构成的不是一棵树,而是森林。然后给出Q次查询,查询两个节点间的最短距离。

#include<stdio.h>
#include<stdlib.h>
struct node{
    int to,next,w;
}a[20010];
struct node1{
    int to,next,ans;
}b[2000010];
int top,jl[10010],begin[10010],wenti[10010];
int fa[10010],p[10010],pd[10010],bh[10010];
void add(int x,int y,int w){
    a[++top].to=y;
    a[top].w=w;
    a[top].next=begin[x];
    begin[x]=top;
    return;
}
int findfa(int x)
{
    if(fa[x]==x) return x;
    return fa[x]=findfa(fa[x]);
}
void findans(int x,int y,int k){
    int lca=findfa(y);
    b[k].ans=jl[x] + jl[y] - 2*jl[lca];
    return;
}
void dfs(int d){

    p[d]=1;
    fa[d]=d;
    int h=wenti[d];
    while(h){
        if(fa[b[h].to]==b[h].to){
            b[h].ans=jl[d] - jl[b[h].to];
        } 
        else if(fa[b[h].to]!=0){
            findans(d,b[h].to,h);
        }
        h=b[h].next;
    }
    h=begin[d];
    while(h){
        if(! p[a[h].to]){
            dfs(a[h].to);
            fa[a[h].to]=d;
        }
        h=a[h].next;
    }
    return;
}
void dfs1(int d){
    bh[d]=top;
    int h=begin[d];
    while(h){
        if(bh[a[h].to]==0){
            jl[a[h].to]=jl[d]+a[h].w;
            dfs1(a[h].to);
        }
        h=a[h].next;
    }
    return;
}
int main(){
    int n,m,x,y,w,i,j,k;
    while(scanf("%d%d%d",&n,&m,&k)!=EOF){
        for(i=1;i<=10000;i++){
            begin[i]=0;
            wenti[i]=0;
            bh[i]=0;
            pd[i]=0;
            p[i]=0;
            jl[i]=0;
            fa[i]=0;
        }
        top=0;
        for(i=1;i<=m;i++){
            scanf("%d%d%d",&x,&y,&w);
            add(x,y,w);
            add(y,x,w);
        }
        top=0;
        for(i=1;i<=n;i++){
            if(bh[i]==0){
                top++;
                dfs1(i);
            }
        }
        top=0;
        for(i=1;i<=k;i++){
            scanf("%d%d",&x,&y);
            if(x==y){
                b[++top].ans=0;
                b[++top].ans=-2;
            }
            else if(bh[x]!=bh[y]){
                b[++top].ans=-1;
                b[++top].ans=-2;
            }

            else {
                b[++top].to=y;
                b[top].ans=-2;
                b[top].next=wenti[x];
                wenti[x]=top;
                b[++top].to=x;
                b[top].ans=-2;
                b[top].next=wenti[y];
                wenti[y]=top;
            }
        }
        for(i=1;i<=n;i++){
            if(pd[bh[i]]==0){
                dfs(i);
                pd[bh[i]]=1;
            }
        }
        for(i=1;i<=2*k;i++){
            if(b[i].ans==-2)
                continue;
            if(b[i].ans==-1)
                printf("Not connected\n");
            else 
                printf("%d\n",b[i].ans);
        }
    }

    return 0;
}
/*
5 3 3
1 3 2
2 4 3
5 2 3
1 4
4 5
1 1
*/ 
7、Python高光谱分析工具(PyHAT)简介 Python高光谱分析工具(PyHAT)是一个开源、跨平台的Python库及图形用户界面,用于行星光谱数据的可视化与分析。它支持多种高光谱传感器数据,如火星勘测轨道飞行器的CRISM、月船1号的M3以及SELENE Kaguya SP点光谱仪,提供预处理、衍生产品生成、统计学习和机器学习分析功能。PyHAT基于Pandas和NumPy构建,兼容Jupyter和QGIS环境,旨在解决现有光谱分析方法缺乏开源实现、难以探索性分析和算法分散的问题。其模块化架构涵盖数据输入/输出、通用光谱变换、测绘与点观测工具及高 阅读详情

相关推荐

Rk3128投影仪救砖操作和固件分享思路

大家搞一条比较硬的东西,插入耳机口,就可以进入刷机模式了的,我的机器是这样的,大家也可以试试。(看不懂可以往下看)

MMX7088的博客 1万+

并查集 + Tarjan算法

并查集是一种用于找出一个森林(图)中树(连通分支)的个数的算法,也可用于判断两个节点是否在同一棵树上。它在每一棵树(连通分支)上选择一个节点作为本棵树(连通分支)的代表。对于给定两个节点,如果他们具有相同的代表节点,则说明两个节点在同一个节点上。

m0_72379992的博客 1424

避坑实录:用certificate-manager重置vCenter 6.7证书时遇到的三个致命陷阱

本文详细解析了使用certificate-manager重置vCenter 6.7证书时可能遇到的三大致命陷阱,包括进度卡在85%的服务启动僵局、脚本突然退出的静默杀手以及密码错误锁死的隐藏机制。通过实战验证的解决方案和高级恢复技巧,帮助系统管理员有效避免vCenter环境瘫痪,确保证书更新过程顺利进行。

g5h6i7j的博客 919

并查集实现Tarjan算法

本文是对http://noalgo.info/476.html的一点理解,特别是对其中 int father[mx]; //节点的父亲 int ancestor[mx]; //已访问节点集合的祖先 这两个数组作用的解释; 首先必须明确,并查集重建的树跟原来的树并不一样; 还是借用该文章的例子: Tarjan算法是基于DFS(深度优先搜索), 图中的树深度优先遍历的顺序应该...

weixin_33850015的博客 446

无人驾驶之车辆控制(1)纯跟踪(Pure Pursuit)算法与Stanley算法

目录引言1 Pure Pursuit纯几何跟踪算法1.1 车辆运动学自行车模型1.2 算法原理1.3 仿真测试2 Stanley算法2.1 算法原理2.2 仿真测试3 总结 引言 本文对Pure Pursuit以及Stanley control两种算法进行了调研以及初步的性能摸底。 1 Pure Pursuit纯几何跟踪算法 1.1 车辆运动学自行车模型 运动学是从几何学的角度研究物体的运动规律,...

zxxxxxxy的博客 2万+

别再自己写消息提示了!5分钟用WPF+Material Design打造专业级Snackbar(支持.NET 6)

本文为WPF开发者提供了一份快速集成专业级Snackbar消息提示的实战指南。通过引入MaterialDesignThemes开源库,在.NET 6 WPF项目中,仅需5分钟即可告别传统的MessageBox,实现遵循Material Design规范、动画流畅、支持队列管理的非侵入式Snackbar控件,显著提升应用的用户体验与现代化交互水平。

year5的博客 173

并查集

使用数组root存储父节点的值。 root[i]=x,如果x<0,表示i是一个集合的根结点,且这个集合有abs(x)个结点;如果x>=0,则表示x是结点i的父节点 int[] root = new int[1005]; int findRoot(int x){ if(root[x]<0) return x; return root[x]=findRoot(root[x]);//compressed path } void union(int x,int

AcTarjan的博客 234

CoppeliaSim(原V-REP)新手上路

CoppeliaSim(原V-REP)是一个机器人仿真平台,里面有很多来自别的公司的机器人模型以及完备的物理引擎,我们可以通过python,c++,matlab等语言控制里面的机器人。,您也可以在官网中Downloads里找您需要的版本,一般只需要下载EDU版本就可以了,我下载的是v4.1.0 windows EDU版本。在版本V4之前,CoppeliaSim叫V-REP,在官网可以下载到之前的V-REP版本。

qq_37051669的博客 4万+

【LCA】Tarjan离线算法(并查集+dfs)模板

vector <int> Q[N];int Find(int x) { if(x != fa[x]) return fa[x] = Find(fa[x]); return x; }void Union(int x, int y) { int fx = Find(x), fy = Find(y); if(fy != fx) fa[fy] = fx; }void dfs(

JSure的代码库 1361

Starlink第三代终端和第二代终端的差异性有哪些?

starlink第三代终端和第二代终端的额差异

chen2jiang3的博客 2929

关于 SAP Fiori Elements 开发项目里的本地 annotation.xml 文件

文件通过引用 SAP 提供的标准词汇表和本地 OData 服务的元数据,为 Fiori Elements 应用定义了一个基础的注解结构。开发者可以在此基础上添加具体的注解,以满足特定的业务需求和界面定制。文件用于定义本地注解,以补充或覆盖来自后端 OData 服务的元数据。元素内添加具体的注解,以定制 Fiori Elements 应用的界面和行为。的架构,用于在本地注解中定义实体、类型和注解。这使得在本地注解中可以引用该 OData 服务的实体和类型。等,用于控制界面元素的显示和行为。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 476

POJ 2874 LCA 树上任意两点距离

本题说了是无环图,所以就是一片森林了。 而对于树上的任意两点,我们可以用LCA求其距离。距离为两个子节点到根的距离和减去最近祖先到根的距离的2倍。具体画图便可看出来。 并且图是无向图,所以LCA时需要进行标记 POJ 1986同这道题 基本一样 /* ID: CUGB-wwj PROG: LANG: C++ */ #include &lt;iostream&gt; #include &...

java开发指南博客 【转载】 667

yolov26改进 | Neck/颈部创新篇 | 独创HFPN利用分层特征融合块HFFB模块融合多层次特征改进yolov26(全网独家创新)

本文提出了一种创新的分层特征融合模块HFFB(Hierarchical Feature Fusion Block)来改进YOLOv26的neck部分,构建了名为HFPN的新型特征金字塔网络。该模块通过三分支结构融合局部特征(CNN提取)、全局特征(Swin Transformer提取)和中间特征,并包含空间注意力(SA)、通道注意力(CA)和残差反向MLP(IRMLP)等组件来优化特征融合效果。实验表明,该方法能针对不同尺度目标(大/中/小)进行自适应检测,可根据具体数据集需求选择不同配置。文章详细提供了核

Snu77的博客 485

hdu 2586 LCA离线算法 Tarjan+并查集 O(n+q)

/* 第一次写最近公共祖先问题,用的邻接表指针。 对于一棵有根树,就会有父亲结点,祖先结点,当然最近公共祖先就是这两个点所有的祖先结点中深度最大的一个结点。 0 | 1 / \ 2 3 比如说在这里,如果0为根的话,那么1是2和3的父亲结点,0是1的父亲结点,0和1都是2和3的公共祖先结点,但是1才是最近的公共祖

天逸南爵的专栏 732

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Tarjan+LCA POJ 3694 Network

链接: http://poj.org/problem?id=3694 给定一无向图,保证是连通的, 之后 逐渐加边,求每次加边后的,图的桥的数目。 由于 数据比较大,要用到LCA + 缩点。 值得学习的 也是 这两点, 求树种两点的 最短路径数,也是这么求。 先Tarjan一下, 求得割边,同时 缩点, 成为一棵树, 树上的边都是 桥,之后添边,两点 有同一个 parent 则 不减少桥的数

Napoleon 997

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LCA题目总结

好像LCA的题目并不多,现在就做了10道左右,但是找不到别的了,在此做个小总结,将来有更好的题目会不断更新 解决LCA问题,一般用3种方法 1.朴素方法:两个点都一直沿路径往上走,直到有某一个节点被经过两次并且是第一次出现这样的点,那么这个就是LCA 此方法最好理解,但是用得不多,但不代表没作用,有些题目还是需要用到的 2.LCA转RMQ(在线算法):一般是将LCA转为RMQ问题,用ST算

龙崎的专栏 809

LCA三种算法学习(离线算法tarjan+在线算法转rmq+在线倍增)例题poj1330、1470;hdu4547、2874

LCA 问题,即Least Common Ancestors(最近公共祖先)的意思是:给定一有根树,求其两个节点最近的公共祖先;节点的祖先即从节点至根的路径上的节点的集合。lca离线算法离线算法,就是要将所有询问先存起来,一起处理,然后再一起输出,与之相对应的是在线算法。在线算法,每给一个询问便可以立即求出答案。Tarjan算法利用并查集优越的时空复杂度,我们可以实现LCA问题的O(n+Q)算法,这

帷幕后的文和 1918

LCA笔记

LCA&训练

C_eeking的博客 374

hdu 2874 Connections between cities (离线LCA)

给n顶点和m条边求任意两点的最短距离,只要找到他们的最近公共祖先就可以求出他们的最短距离,先处理后询问,只是很明显的离线LCA可以用tarjan离线算法。 昨天做了一道类似的,此题和poj1330很接近,几乎是它的一个扩展。如果做个那题此题可迎刃而解。 #include<iostream> #include<vector> using namespace std...

weixin_30888707的博客 95

LCA(最近公共祖先)学习、

基於Tarjan資料:傳送門                             傳送門 入門題: POJ 1330

傻傻分不清、 292

LCA(最近公共祖先)专题(不定期更新)

Tarjan(离线)算法   思路:       1.任选一个点为根节点,从根节点开始。       2.遍历该点u所有子节点v,并标记这些子节点v已被访问过。       3.若是v还有子节点,返回2,否则下一步。       4.合并v到u上。       5.寻找与当前点u有询问关系的点v。       6.若是v已经被访问过了,则可以确认u和v的最近公共祖先为v被合并到的父...

weixin_34072637的博客 140

Tarjan&LCA题集

【HDU】 [强连通]: 1269  迷宫城堡 判断是否是一个强连通★ 2767Proving Equivalences  至少加几条边让整个图变成强连通★ 3836 Equivalent Sets  至少加几条边让整个图变成强连通★ 1827    Summer Holiday  传递的最小费用★★ 3072    Intelligence System  传递的最小费用★★ 38

夏天的风 8067

Tarjan&LCA题集【夏天的风】

【HDU】 [强连通]: 1269  迷宫城堡 判断是否是一个强连通★ 2767Proving Equivalences  至少加几条边让整个图变成强连通★ 3836 Equivalent Sets  至少加几条边让整个图变成强连通★ 1827    Summer Holiday  传递的最小费用★★ 3072    Intelligence System  传递的最小费用★★ 38

671coder的专栏 5456

【HDU】2874 Connections between cities 离线LCA

Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4304    Accepted Submission(s): 1236 Problem Description Af

poursoul 1265
上一篇: LCA之ST算法模板 poj-1986
下一篇: 树链剖分-spoj375
struct_liao
博客等级 码龄10年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值