2014新生暑假个人排位赛06 -447. 修路(并查集)

本文介绍了一个经典的图论问题——修路问题,并通过使用并查集算法来解决该问题。具体而言,该问题要求在给定的连通图中找到最小数量的路进行修复,以便从任意点均可到达特定的目标点。
时间限制 3000 ms 内存限制 65536 KB

题目描述

小弱的学校很喜欢修路,现在给你一张他学校的地图,地图上有n个点和m条双向边,每条边代表一条路,这条路有可能是畅通,也有可能正在修路。大家都知道修路使得交通很不方便。所有小弱很想学校快快的把路修好,使得他能够很轻松的到达主楼915去刷题。但考虑到学校的施工能力有限,小弱想让你帮他算出学校需要集中力量马上修好的最少路数,使得他能够从学校任意点出发,在不经过正在施工的路下到达主楼(编号为1)。

输入格式

有多组数据。
每组数据以n( 1<=n<=10000), m(1<=m<=200000)开头。接下来一行有m行数。每行有三个数,对应于u, v, s,分别为这条路的两端点(编号从1到n)和路况,s = 0代表畅通, s = 1 代表正在修路。输入保证图是连通图。

 

输出格式

对每组数据输出对应的最少路数。

输入样例

3 2
1 2 0
1 3 1
3 2
1 2 0
1 3 0
3 2
1 2 1
1 3 1

输出样例

1
0
2
<pre name="code" class="cpp">#include <iostream>//用并查集来做;想到并查集,是因为本体要求的是看整个连通图被分为几个部分(注意是连通图所以不用考虑那种没路的可能);
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=10004;
int fa[maxn];
int flag[maxn];
<span style="font-family: Arial, Helvetica, sans-serif;">void init(int n)</span>
{
    for(int i=0;i<=n;i++)
    {
        fa[i]=i;
        //rank[i]=1;
    }
}
 
int find(int x)
{
    if(fa[x]==x) return x;
    else return fa[x]=find(fa[x]);
}
void unite(int x,int y)
{
    x=find(x);
    y=find(y);
    fa[x]=y;
    //if(rank[x]==rank[y]) rank[x]++;
}
 
 
int u,v,s;
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)==2)
    {
       init(n);
       int ans=0;
       while (m--)
       {
           scanf("%d%d%d",&u,&v,&s);
           if(s==0) unite(u,v);//有路的归到一个集合去;
       }
       memset(flag,0,sizeof(flag));
       for(int i=1;i<=n;i++)
            flag[find(i)]=1;//将并查集的代表元素的flag设为1;
        for(int i=1;i<=n;i++)
            if(flag[i]==1)
                ans++;//查看形成几个并查集;
        printf("%d\n",ans-1);
    }
    return 0;
}



(Kriging_NSGA2)克里金模型结合多目标遗传算法求最优因变量及对应的最佳自变量组合研究(Matlab代码实现)内容概要:本文介绍了克里金模型(Kriging)与多目标遗传算法NSGA-II相结合的方法,用于求解最优因变量及其对应的最佳自变量组合,并提供了完整的Matlab代码实现。该方法首先利用克里金模型构建高精度的代理模型,逼近复杂的非线性系统响应,减少计算成本;随后结合NSGA-II算法进行多目标优化,搜索帕累托前沿解集,从而获得多个最优折衷方案。文中详细阐述了代理模型构建、算法集成流程及参数设置,适用于工程设计、参数反演等复杂优化问题。此外,文档还展示了该方法在SCI一区论文中的复现应用,体现了其科学性与实用性。; 适合人群:具备一定Matlab编程基础,熟悉优化算法和数值建模的研究生、科研人员及工程技术人员,尤其适合从事仿真优化、实验设计、代理模型研究的相关领域工作者。; 使用场景及目标:①解决高计算成本的多目标优化问题,通过代理模型降低仿真次数;②在无法解析求导或函数高度非线性的情况下寻找最优变量组合;③复现SCI高水平论文中的优化方法,提升科研可信度与效率;④应用于工程设计、能源系统调度、智能制造等需参数优化的实际场景。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现过程,重点关注克里金模型的构建步骤与NSGA-II的集成方式,建议自行调整测试函数或实际案例验证算法性能,并配合YALMIP等工具包扩展优化求解能力。
### S3 AWD排位赛第四场的比赛详情与参与方式 AWD(Attack With Defense)是一种综合性的网络安全竞赛形式,参赛队伍需要同时完成攻击和防御的任务。S3 AWD排位赛作为一项高水平的赛事活动,吸引了众多网络安全爱好者和技术专家的关注。 #### 比赛详情 S3 AWD排位赛通常由多个阶段组成,其中包括预选赛、正式比赛以及最终排名公布等环节。对于第四场比赛的具体安排,可以参考以下几点: - **时间安排**:每一场S3 AWD排位赛的时间表会在官方公告页面提前发布。建议关注主办方的官方网站或社交媒体平台获取最新动态[^1]。 - **比赛模式**:采用攻防兼备的形式,即各支队伍不仅需要保护自己的服务器免受其他队伍的攻击,还需要主动寻找并利用对手系统的漏洞发起进攻。这种机制能够全面考察选手的技术实力和团队协作能力[^2]。 - **技术挑战**:比赛中可能会涉及多种类型的漏洞挖掘与复工作,例如内存泄漏问题可以通过特定字符如`\x00`实现字符串截断处理;而对于函数调用中的缓冲区溢出风险,则可通过严格控制输入数据长度加以规避。 #### 如何参与 要参与到S3 AWD排位赛当中,需遵循如下流程: - **注册报名**:访问赛事官网填写必要信息完成初步登记手续。一般情况下会要求提供队员名单及相关背景资料以便审核资格条件。 - **准备环境**:熟悉Linux操作系统及其常用命令行工具操作方法,并掌握至少一种编程语言用于编写自动化脚本辅助分析过程。此外还需学习常见Web应用框架结构特点以及数据库管理技巧等方面的知识点。 - **练习提升**:通过参加各类CTF在线训练营或者模拟对抗演练积累实战经验,提高解决实际问题的能力水平 。特别注意的是,在真实环境中遇到复杂状况时保持冷静思考尤为重要 。 以下是快速排序算法的一个简单例子供参考: ```python def quick_sort(arr): if len(arr) <= 1: return arr else: pivot = arr[len(arr)//2] left = [x for x in arr if x<pivot ] middle=[x for x in arr if x==pivot] right= [x for x in arr if x>pivot] return quick_sort(left)+middle+quick_sort(right) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值