[Gym-101174K] [Problem K] 判环+ 码力+ 题意

Floyd判圈法(Floyd Cycle Detection Algorithm)   Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm)。可用于判定链表、迭代函数、有限状态机中是否有环。如果有环,可以找出环的起点,求出环的长度。   基本思想:利用了快慢指针的思想。两个人在赛跑,A速度快,B速度慢,若是存在环(勺状图),A和B总是会相遇的,相遇时A所经过的路径的长度要比B多若干个环的长度。 算法时间复杂度:令S到P的距离为m,环的长度为n,时间复杂度O(m+n),即O(n); 阅读详情

参考https://vjudge.net/solution/7644516

心得:

  1. 这里的 u>=v的限定 ,然后又有 对于边的map映射…
  2. 对于这种的重边的情况,可以这样用map.
  3. 注意当用map 的时候用这个point 的时候会有的错误.
  4. 判环应该更简洁
  5. fst,和ff

然而下面的代码是错的,不想看了

struct point{
    int x,y,z;
    point (int x=0,int y=0,int z=0):x(x),y(y){}
    //point (int x,int y,int z):x(0),y(0),z(0){}
    bool friend operator<(point a,point b){
        return a.x<b.x||(a.x==b.x&&a.y<b.y)||(a.x==b.x&&a.y==b.y&&a.z<b.z);
    }
};
struct point2{
    int x,y;
    point2(int x=0,int y=0):x(x),y(y){}
    //point2(int x,int y):x(0),y(0){}
    bool friend operator <(point2 a,point2 b){
        return a.x<b.x||(a.x==b.x&&a.y<b.y);
    }
};
int n;
map<point,int>mp1;
map<point2,int >mp2;
map<pii,int>f1,f2;
int cnt1,cnt2;
int ok;
int id1(int x,int y,int z){
    if(mp1.count(point(x,y,z))==0){
        mp1[point(x,y,z)]=++cnt1;
    }
    return mp1[point(x,y,z)];
}
int id2(int x,int y){
    if(mp2.count(point2(x,y))==0){
        mp2[point2(x,y)]=++cnt2;
    }
    return mp2[point2(x,y)];
}
int vis[N];
int fst[N<<1],nxt[N<<2],ff[N<<1],vv[N<<2],e;
void dfs1(int u,int p){
    if(vis[u]){
        ok=1;return ;
    }
    vis[u]=1;
    for(int i=fst[u];~i&&!ok;i=nxt[i]){
        int v=vv[i];
        if(v==p)continue;
        dfs1(v,u);
    }
}

void dfs2(int u,int p){
    if(vis[u]){
        ok=1;return;
    }
    vis[u]=1;
    for(int i =ff[u];~i&&!ok;i=nxt[i]){
        int v=vv[i];
        if(v==p)continue;
        dfs2(v,u);
    }
}
void init(){
    mem(fst,-1);
    mem(ff,-1);e=0;
}
void add(int u,int v){
    vv[e]=v;nxt[e]=fst[u];fst[u]=e++;
}
void _add(int u,int v){
    vv[e]=v;nxt[e]=ff[u];ff[u]=e++;
}
int main(){
    ree
    //cin>>n;
    sf("%d",&n);
    init();
    cnt1=0,cnt2=0;
    rep(i,1,n){
        int x,y,z,xx,yy,zz;
        sf("%d%d%d%d%d%d",&x,&y,&z,&xx,&yy,&zz);
        int u=id1(x,y,z),v=id1(xx,yy,zz);
        if(u<v)swap(u,v);
        if(u==v)continue;
        if(f1.count(MP(u,v))==0){
            f1[MP(u,v)]=1;
            add(u,v);add(v,u);
        }

        u=id2(x,y);v=id2(xx,yy);
        if(u<v)swap(u,v);
        if(u==v)continue;
        if(f2.count(MP(u,v))==0){
            f2[MP(u,v)]=1;
            _add(u,v);_add(v,u);
        }
    }
    //cout<<cnt1<<' '<<cnt2<<endl;
        ok=0;
    mem(vis,0);
    for(int i=1;i<=cnt1;++i){
        if(!vis[i]){
            dfs1(i,i);
            if(ok)break;
        }
    }
    if(ok)puts("True closed chains");
    else puts("No true closed chains");
    ok=0;
    mem(vis,0);
    for(int i=1;i<=cnt2;++i){
        if(!vis[i]){
            dfs2(i,i);
            if(ok)break;
        }
    }
    if(ok)puts("Floor closed chains");
    else puts("No floor closed chains");
}
【算法学习】图论专题 判断无向图中环的存在、环的输出 文章目录一、无向图 Detect Cycle in a Undirected Graph1. DFS(1) 判断环的存在(2) 输出环路2. BFS(1) 判断环的存在3. Union-Find(1) 原理讲解(2) 代码实现二、有向图 Detect Cycle in a Directed Graph1. Detect Cycle in a Directed GraphDetect Cycle in a Directed Graph using BFSDetect Cycle in a directed g 阅读详情

相关推荐

Playwright自动化测试实战:攻克日历时间控件三大策略与Java实现

在Web自动化测试领域,元素定位与交互模拟是核心技术基础,其原理在于通过程序精确识别并操作页面中的DOM元素,以模拟真实用户行为。这项技术的核心价值在于提升测试效率、确保交互逻辑的覆盖度与可靠性,广泛应用于电商、金融、OA等系统的功能验证。日历时间控件作为典型的复杂交互组件,常涉及动态弹出层、多级导航与状态同步,是自动化测试中的常见难点。本文聚焦于使用Playwright工具,针对此类控件深入剖析了三种核心解决策略:从最高效的直接赋值、到全面模拟用户交互的主流方法,再到利用组件特性的混合定位方案,并结合Ja

weixin_28835551的博客 311

P2661 信息传递

又双叒叕是并查集并建立一个圈求最小环 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 int f[200002],d[200002],n,minn,last; //f保存祖先节点,d保存到其祖先节点的路径长。 5 int fa(int x) 6 { ...

weixin_38170829的博客 189

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 183

判断图中是否存在环的方法

判断图中是否存在环一般有四种方法:① 拓扑排序; ② 强连通分量算法/双连通分量算法; ③ spfa判环;④ 直接dfs遍历一遍;

二哈 5275

CentOS7下快速修复libssl.so.1.1缺失问题(附腾讯云镜像加速下载)

本文详细介绍了在CentOS7系统中快速修复libssl.so.1.1缺失问题的工程化实践方案。通过编译安装OpenSSL 1.1.x版本、配置动态链接器及创建符号链接等步骤,有效解决共享对象文件缺失问题,并提供了腾讯云镜像加速下载的优化方案,帮助开发者高效部署现代应用。

weixin_33711647的博客 368

Nvidia AGX Xavier刷机指北

因为工作的关系,要在AGX上安装CUDA。nvidia官网上没找到适合AGX版本的CUDA,只能走刷机的路子。刷机过程中,也遇到一些坑,做个记录。 需要有一台ubuntu系统的电脑作为主机Host。我的主机系统为Ubuntu18.04 整个刷机过程为: 在Host上安装sdkmanager,整个刷机过程主要通过sdkmanager来操作。 在Host自动下载一些系统组件,各种deb包 Host上制作OS系统镜像,烧录到AGX中 Host上之前下载好的deb包,安装到AGX中。 完结,撒花 ...

sinat_38685124的博客 6296

环形链表问题(判环+寻找入环点)

环形链表问题(判断+寻找入环点)

m0_70980326的博客 1224

CDD数据库文件制作(三)——服务配置(0x10)

根据诊断调查表进行每一步配置的详细操作,与背后逻辑解释 1.会话切换配置 1.1.根据诊断调查表进行信息提取(0x1001) 1.2.会话转换配置(0x1001) 1.3.根据诊断调查表进行信息提取(0x1002) 1.4.会话转换配置(0x1002) 1.5.根据诊断调查表进行信息提取(0x1003) 1.6.会话转换配置(0x1003) 1.7.会话切换配置完成后效果图 2.安全等级配置信息提取 2.1.安全访问配置(0x1001) 2.2.安全访问配置(0x1002) 2.3.安全访问配置(0x100

LOVE135149的博客 5838

算法-floyd判环(圈)算法

floyd(Floyd cycle detection)问题:如何检测一个链表是否有环,如果有,那么如何确定环的起点?如何确定环的长度? 时间复杂度:O(n) (高效率) 空间复杂度:O(1) 此算法又成为龟兔赛跑算法,基本思想是:好比两个人在赛跑,A的速度快,B的速度慢,经过一定时间后,A总是会和B相遇,且相遇时A跑过的总距离减去B跑过的总距离一定是圈长的n倍(初中数学题……)。弗洛伊德(Floy

q2nAmor 1万+

LeRobot 入门教程(十)LIBERO 机器人终身学习评估

LIBERO是一项专注于机器人终身学习(LLDM)的基准测试平台,包含130项任务,分为5大套件(空间推理、物体操作、目标约束等)。LeRobot框架已集成LIBERO,支持单/多套件评估,并兼容SmolVLA模型。训练需使用预处理数据集(HuggingFaceVLA/libero),观测数据需符合规范(8维状态+双摄像头图像)。该平台采用MuJoCo模拟,支持无头服务器运行,旨在推动机器人持续学习算法的发展与标准化评估。

2506_90492529的博客 1663

基于YOLOv11的气象目标检测系统:台风眼与钩状回波检测

气象目标检测是计算机视觉在气象领域的重要应用,对台风预警和强对流天气监测具有重要意义。本文详细介绍了一种基于YOLOv11的气象目标检测系统,能够有效识别卫星云图中的台风眼和雷达图中的钩状回波。系统包含完整的数据处理流程、模型训练策略以及用户友好的Web界面。我们使用了公开的气象数据集进行训练和验证,并提供了完整的实现代码。实验结果表明,本系统在气象目标检测任务中达到了较高的准确率和实用性。关键词:气象目标检测;YOLOv11;台风眼检测;钩状回波;深度学习;计算机视觉台风眼检测数据集。

YOLO 474

弗洛伊德判环算法

m为环外路径,n为环的长度 慢 m+kn 快:慢的两倍 m+m+2kn 快-慢:快慢相遇,所以快比慢多跑t圈 m+kn=tn 此时慢从头开始,走m步到达起点,快也走m步: 2m+2kn+m=m+2tn 所以此时快指针的位置是环起点后转了2t圈,所以又回到了环起点。 ...

weixin_44023015的博客 527

「UG/NX」Block UI 曲线收集器CurveCollector

曲线收集器块用于选择一条或多条曲线,包括通过选择意图连接的末端曲线链。曲线选择意图用于此块,但它不支持“交点处停止”、“跟随圆角”、“中间链”和“特征内链”等规则选项。

何曾参静谧的博客 1090

Gym - 101174E[AC自动机+DP]

题目链接:https://vjudge.net/problem/Gym-101174E 解题思路: 数据小,首先想可以不可以DP(虽然我一开始傻了没有往这个方向想) 将n个串建一个AC自动,然后用dp[i][j][k]表示选取了长度为i的密码长度,这个密码后缀对应自动机上的节点j,k是三个字符的选择情况的二进制,然后就是标记不可包含的节点,之后就可以在AC自动机上跑DP了。 #in...

过路人丶的博客 299

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

判环的方法

判环的方法 SPFA O(n*n)(n为点数) 拓扑排序 可以有重边 O(n) Tarjan 实质上也是拓扑排序 有待完善

AnnieL 1343

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

解压文本(dfs+判环)

不难发现文件可以解压,当且仅当 1 号点出发能到达的节点集合,是一个有向无环图(DAG)。递归解压它引用到的文本,如果中途发现引用的节点。无法解压的情况,就是图里存在环。用于存储已经解压的内容,一旦发现其长度超过。说明出现了环(本质上同,无向图找环)。解压到这个文本时,给其标记。则直接返回,否则最后输出。

weixin_73550568的博客 218

【图论】判环问题

(未更新完、做到相关题再更新相关部分。

Texcavator的博客 836

每日题解(6)判环算法(快慢双指针)

还有此时这种情况,就是当整个链表都为环时,这种情况较为特殊,针对此种情况,就是当兔兔指针追上龟龟指针的时候,就正好在起点,2x-x=12,x=12,就是走12步,用数学的芝士解释一下,如果此时我们的判断条件t==r在移动指针的代码之后,两个指针各走一次,还是相同,所以找到的环入口就错误了,所以判断条件在移动指针的代码之前,这样即使是最为特殊的情况,我们的代码也能将其解决!如果没有环,我们就返回null。

QWERTYUIef的博客 199

有向图无向图判断有环(求环的长度)

东北地区赛有个无向图判自环的题当时没苟出来,回来之后想了想用并查集可以实现,然后仔细查了一波还有哪些方法…… 总结一波博客吧QAQ…… 资源来源: https://blog.youkuaiyun.com/ouyangruo/article/details/51057409 https://blog.youkuaiyun.com/acmdream/article/details/72983715 http://w...

小衣同学的博客 5770

3.22记录

文章目录1.经典问题-链表判环 1.经典问题-链表判环 题目描述:给你一个链表,判断链表中有没有环,如果有输出true,否则,输出false 题解: 快慢指针相遇则有环,否则快指针指向NULL,则没有环。 class Solution { public: bool hasCycle(ListNode *head) { if(head==NULL) return false; ListNode* slow,* fast; slow

yznfk的博客 120

关于判环

关于有向图的判环 1.只有正(负)边权 拓扑排序一遍就好了 记住,图不一定是联通时,一定要把每个入度为零的节点跑一遍!!! 核心代码如下: int in[N],timeq=0,n,m;//timeq 时间戳 int vis[N];//标记数组 inline bool dfs(int u){//u 当前节点 bool flag=false;//flag 标记 fo...

恒持此志成永志 402

vue页面传递参数(常用方法二)

最常用的方式A页面跳转到B页面,传递参数(id和code) A页面触发跳转事件 this.$router.push({ name: "ProInsur",//ProInsur路由的name值 params: { id: xxx, Code:xxx } }); B页面接收参数 id:this.$route.params.id, code...

小剑儿的博客 373

无向图判环(DFS与并查集)

无向图判环(DFS与并查集) ps:一道本校院赛题,最后一小时应该开这道题的,导致到比赛结束这道题都看都没看 XP的校园漫步 题目描述 众所周知,XP学长即将毕业了,所以他觉得在校园里来一次漫步,在学校中有N个标志性的建筑,XP学长并不喜欢走小路,因此他会随机的选择某条大路从某个建筑走到另一个建筑,XP学长当然想要走遍校园内的所有建筑,但他会随机的选择某一条路去漫步,当然XP学长走完某一条路,...

serendipity的博客 2836

Codeforces Gym 101174 B. Bribing Eve

ProblemN 组产品,每组打分为 x1 x2 ,产品的最终得分由 [w1, w2] 确定,scorei=w1×x1i+w2×x2iscore_i = w_1\times x_{1i} + w_2 \times x_{2i} 。当分数相等,可任意确定先后排序。求第一组的最高可能排名和最低可能排名。限制条件1 ≤ N ≤ 100000 1≤x1, x2≤10001\le x_1,\ x_2 \le

DorMOUSENone的博客 1113
上一篇: Elementary Math Gym - 101485E 二分图匹配
下一篇: Codeforces Gym F. Performance Review (树状数组 + DFS 序)
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值