1272(translate 并查集)

本文介绍了一种使用并查集算法验证迷宫属性的方法,包括判断迷宫是否有环及是否单根。通过实例代码详细解析了算法实现过程,适用于无环、单根的迷宫验证。

并查集。题目要求的迷宫有两个特点:1:无环、2:单根,因此,若同一边上的两个点拥有相同的父节点,则可以认为有环,最后加一个扫描,判断根节点个数。

若一条边的两个节点为同一个父节点,则成环。若所有的节点的父节点相同则联通。注意输入0 0时为Yes。

拓展:改为有向图hdu1325

1:保证图是连通的,且连通分量为1( 即从一点可以到任意一点 )

2:不存在环(包括自环)

因为这是一个无向图,只要保证 顶点数 = 边数+1 , 就可以说明是连通的。如果存在1->2 , 2->3 , 1->3这样的图话,虽然满足了左面的公式,但是已经成了环,所以也不会影响到最后的判断。

#include<bits/stdc++.h>
using namespace std;
const int M= 100005;
int a,b;
int father[M];       //记录父节点
bool circle;         //判断是否存在环
bool visit[M];       //用来记录顶点数
int edgenum,pointnum;    //分别表示边数,顶点数
void init( )
{
    for( int i=0 ; i<M ; i++ )
        father[i] = i,visit[i]=false;
    circle = false;
    edgenum = pointnum = 0;
}
int Find(  int x )
{
    return x==father[x]?x:father[x]=Find(father[x]);
}
    void unin( int a,int b )
    {
        if(a==b)
            circle = true;
        int x, y;
        x = Find(a);
        y = Find(b);
        if( x != y )
        {
            father[x] = y;
            edgenum++;       //引出一条边
        }
        else
            circle = true;   //x==y,说明他们是同一个祖先,一旦连通便与祖先3者成环
    }

    int main()
    {
        while( true )
        {
            init( );
            scanf("%d%d",&a,&b);
            if( a==0 && b==0 )      //为空树
            {
                printf("Yes\n");
                continue;
            }
            if( a==-1 && b==-1 )
                break;
            visit[a] = true;
            visit[b] = true;
            unin( a,b );
            while( true )
            {
                scanf("%d%d",&a,&b);
                if( a==0 && b==0 )
                    break;
                visit[a] = true;
                visit[b] = true;
                unin( a, b );
            }
            for( int i=0 ; i<M ; i++ )
                if( visit[i] )
                    pointnum++;
            if(  !circle && edgenum+1 == pointnum )
                printf("Yes\n");
            else
                printf("No\n");
        }
        return 0;
    }



#include<bits/stdc++.h>
using namespace std;
const int  N=100000+5;
bool circle;//判断是否形成个环
int fa[N];
int Find(int x)//爆栈就是在这里
{
    if(fa[x]!=x) fa[x]=Find(fa[x]);
    return fa[x];
}
void uni(int x,int y)
{
    int xx=Find(x);
    int yy=Find(y);
    if(xx!=yy)
        fa[xx]=yy;
    else
        circle=true;  //第一次合并绝对不会出现环
    //只有游乐环才会第二次合并。
}
void init()
{
    for(int i=1; i<N; i++)
        fa[i]=i;
}
int main()
{
    set<int>s;//至于这个set容器可以用来找顶点,在这个容器里重复的数字只计一次
    int a,b,sum;//sum计算边
    while(scanf("%d %d",&a,&b)!=EOF)
    {
        init();
        sum=1,circle=false;
        if(a==0&&b==0)//这也是一个比较坑的地方
        {
            printf("Yes\n");
            continue;
        }
        if(a==-1&&b==-1)
            break;
        s.insert(a);
        s.insert(b);
        if(!circle)
            uni(a,b);
        while(1)
        {
            scanf("%d %d",&a,&b);
            if(a==0&&b==0)
                break;
            s.insert(a),s.insert(b);
            if(!circle)
                uni(a,b);
            sum++;
        }
        if(!circle&&s.size()==sum+1)
            printf("Yes\n");
        else
            printf("No\n");
        s.clear();
    }
    return 0;
}

【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度()—MPS动态调度(Matlab代码实现)内容概要:本文档围绕“基于配电网韧性提升的应急移动电源预配置和动态调度”主题,重点介绍MPS(Mobile Power Sources)动态调度的Matlab代码实现,是SCI一区论文复现的技术资料。内容涵盖在灾害或故障等极端场景下,如何通过优化算法对应急移动电源进行科学调度,以提升配电网在突发事件中的恢复能力与供电可靠性。文档强调采用先进的智能优化算法进行建模求解,并结合IEEE标准测试系统(如IEEE33节点)进行仿真验证,具有较强的学术前沿性和工程应用价值。; 适合人群:具备电力系统基础知识和Matlab编程能力,从事电力系统优化、配电网韧性、应急电源调度等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于复现高水平期刊(SCI一区、IEEE顶刊)中关于配电网韧性与移动电源调度的研究成果;②支撑科研项目中的模型构建与算法开发,提升配电网在故障后的快速恢复能力;③为电力系统应急调度策略提供仿真工具与技术参考。; 阅读建议:建议结合前篇“MPS预配置”内容系统学习,重点关注动态调度模型的数学建模、目标函数设计与Matlab代码实现细节,建议配合YALMIP等优化工具包进行仿真实验,并参考文中提供的网盘资源获取完整代码与数据。
一款AI短视频生成工具,只需输入一句产品卖点或内容主题,软件便能自动生成脚本、配音、字幕和特效,并在30秒内渲染出成片。 支持批量自动剪辑,能够实现无人值守的循环生产。 一键生成产品营销与泛内容短视频,AI批量自动剪辑,高颜值跨平台桌面端工具。 AI视频生成工具是一个桌面端应用,旨在通过AI技术简化短视频的制作流程。用户可以通过简单的提示词文本+视频分镜素材,快速且自动的剪辑出高质量的产品营销和泛内容短视频。该项目集成了AI驱动的文案生成、语音合成、视频剪辑、字幕特效等功能,旨在为用户提供开箱即用的短视频制作体验。 核心功能 AI驱动:集成了最新的AI技术,提升视频制作效率和质量 文案生成:基于提示词生成高质量的短视频文案 自动剪辑:支持多种视频格式,自动化批量处理视频剪辑任务 语音合成:将生成的文案转换为自然流畅的语音 字幕特效:自动添加字幕和特效,提升视频质量 批量处理:支持批量任务,按预设自动持续合成视频 多语言支持:支持中文、英文等多种语言,满足不同用户需求 开箱即用:无需复杂配置,用户可以快速上手 持续更新:定期发布新版本,修复bug并添加新功能 安全可靠:完全本地本地化运行,确保用户数据安全 用户友好:简洁直观的用户界面,易于操作 多平台支持:支持Windows、macOS和Linux等多个操作系统
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值