codeforces D.Dima and Bacteria (floyd+并查集)

Ansys Icepak:通过 ECAD 导入和非共形网格划分掌握电子冷却 通过将 Icepak 与 HFSS(用于高频电磁学)、Ansys Mechanical(用于结构分析)和 Ansys Fluent(用于流体动力学)等 Ansys 产品相结合,工程师可以在单个工作流程中仿真电子系统的完整行为,从热和电气动力学到机械和流体动力学。精细网格可以应用于关键区域,而在不太重要的区域使用较粗的网格,从而在不牺牲精度的情况下加快仿真速度。这些功能使 Ansys Icepak 成为从事复杂电子设计的工程师不可或缺的工具,可实现更精确的热分析并缩短开发时间。用于高效仿真的非共形网格划分。 阅读详情
题目链接:Dima and Bacteria
题意:

给出n个点,m条边,每条边是双向的,并且有权值。n个点分为k个种类,每个种类有Ci个点
如果任意两个相同点之间转移,可以找到一条路径,该路径满足经过的边的权值和为0则输出Yes,输出任意两个种类的点之间转移的最小路径。否则输出No;

思路:

分为两个问题
1.先用并查集判断是否相同种类任意两点是连通的。
对权值为0的边的顶点unite,然后查找每个种类的点是否都连通。
2.最短路问题
点不多,用floyd算法,解决最短路。d[i][j]=mi{d[i][j],d[i][k]+d[k][j]}

遇到的问题:

1.刚开始没想到可以用并查集解决第一个问题。
2.初始化越界了,找了好久。。。
3.floyd算法模板打错了。
4.并查集维护,应该对所有花费为0 的点都进行维护,刚开始就只对相同种类的点进行 维护。后来才发现错了。
第一次d题没去看题解解决了。但是写题半小时debug两小时。写题的时候细节没处理好,思维不够全面,一些细节总是想当然,一旦钻进牛角尖就很难出来了。

代码:

#include<iostream>
#include<vector>
#include<algorithm>
const int INF = 999999999;
using namespace std;
int c[610], d[510][510], type[101000], n, m, k, pre[101000];
//初始化
void init()
{
    int i, j;
    c[0] = 0;
    for (i = 1, j = 1; i <= k; ++i)
    {
        for (int l = 0; l<c[i]; ++l, ++j)
        {
            type[j] = i;
        }
    }
    for (i = 1; i <= k; ++i)
    {
        for (j = 1; j <=k; ++j)
        {
            if (i == j)d[i][j] = 0;
            else 
            d[i][j] = INF;
        }
    }
    for (i = 1; i <= n; ++i)
    {
        pre[i] = i;
    }
}
//并查集
int find(int x)
{
    if (pre[x] == x)
        return x;
    else
    {
        return pre[x] = find(pre[x]);
    }

}
void Unite(int x, int y)
{
    int fx = find(x), fy = find(y);
    if (fx != fy)pre[fy] = fx;
}

int main()
{
    int i, j;
    cin >> n >> m >> k;
    for (i = 1; i <= k; ++i)
        cin >> c[i];
    init();

    for (i = 0; i<m; ++i)
    {
        int s, t, p;
        cin >> s >> t >> p;
        if (type[s]!= type[t])
        {
            d[type[s]][type[t]] = min(p, d[type[s]][type[t]]);
            d[type[t]][type[s]] = min(p, d[type[t]][type[s]]);
        }
        //对边的权值为0 进行维护
        if (p == 0) {
            Unite(s, t);
        }
    }

    int flag = 0;
    //判断是否连通
    for (i = 1, j = 1; i <= k; ++i)
    {
        int f = find(j);
        for (int l = 0; l<c[i]; ++l, ++j)
        {
            if (find(j)!=f) {
                flag = 1;
                break;
            }
        }
        if (flag)break;
    }
    if (flag)
    {
        cout << "No" << endl;
    }
    else
    {
        cout << "Yes" << endl;
        //floyd算法找最短路
        for (i = 1; i <= k; ++i)
        {
            for (j = 1; j <= k; ++j)
            {
                for (int l = 1 ; l <= k; ++l)
                {
                    d[j][l] = min(d[j][l], d[j][i] + d[i][l]);
                }
            }
        }
        for (i = 1; i <= k; ++i)
        {
            for (j = 1; j <=k; ++j)
            {
                if (d[i][j] == INF)cout  << -1<<" ";
                else 
                cout <<d[i][j]<<" ";
            }
            cout << endl;
        }
    }
    return 0;
}
滤波算法实现大全——基于匀速直线运动模型的kalman滤波算法 阅读详情

相关推荐

PyTorch转ONNX遇到算子不支持?3种实战解决方案+TensorRT适配技巧

本文针对PyTorch模型导出ONNX时常见的算子不支持问题,提供了从诊断到解决的完整实战指南。首先讲解如何精准定位错误根源,随后详细介绍了三种核心解决方案:注册缺失的符号映射、实现自定义算子,以及为TensorRT开发插件的终极落地方案。文章还分享了构建稳健部署流水线的工程化实践,帮助开发者系统性地解决模型部署中的算子兼容性挑战。

fern8的博客 842

codeforces并查集_1263D

本题可以使用并查集来进行解答,我们可以将一个字符串中所有的字符与第一个字符合并,再在最后进行一遍检查。给你n个字符串,如果两个字符串中拥有相同的字符,则他们属于同一集合,问你有多少个集合。

triangle_617的博客 414

告别第三方插件:官方Fused Library如何重塑Android库的合并与发布流程

本文详细介绍了Android官方推出的Fused Library如何替代第三方fat-aar插件,优化Android库的合并与发布流程。通过原生支持、智能依赖管理等优势,Fused Library解决了版本兼容性、依赖传递等核心痛点,提供了更稳定高效的开发体验。文章还提供了迁移实操指南和工程实践建议,帮助开发者顺利过渡到官方方案。

weixin_42561040的博客 253

CodeForces News Distribution (并查集)

Example input 7 5 3 2 5 4 0 2 1 2 1 1 2 6 7 output 4 4 1 4 4 2 2 n个人,m组关系,接下来m行。每行p个人,这p个人是朋友,朋友的朋友也是我的朋友。 最后按顺序输出自己的朋友数+1. 直接套并查集的板子 不懂的可以参考这篇博客,点击这里 路径压不压缩都可以,但是压缩以后时间会缩短 AC代码: ...

邵光亮的博客 675

告别水印!Vue3项目集成Stimulsoft.Reports.js完整配置与激活指南

本文详细介绍了如何在Vue3项目中集成Stimulsoft.Reports.js,提供从授权策略到性能优化的完整解决方案。通过模块化架构设计和现代化引入方式,帮助开发者高效实现专业级报表功能,同时避免版权风险和水印问题,特别适合中小型项目需求。

weixin_33701294的博客 431

VS2015+C++实战:手把手教你用海康MVS里的Demo搞定多相机同步采图与保存

本文详细解析了在VS2015+C++环境下,利用海康威视MVS工业相机SDK实现多相机同步采图与保存的全流程。从环境准备、SDK选择到多相机初始化、同步采图方案,再到异常处理与性能优化,提供了实战技巧和代码示例,帮助开发者快速掌握工业相机二次开发的核心技术。

weixin_29170327的博客 280

Dima and Bacteria CodeForces - 400D [最短路+缩点] 好题~

D. Dima and Bacteria time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Dima took up the biology of bacteria,

Haipai1998的博客 476

一步步教你获取ADNI影像数据:从搜索到下载全流程解析

本文详细解析了从ADNI数据库获取阿尔茨海默病影像数据的全流程,包括账号注册、数据检索技巧、高效下载策略及常见问题解决方案。特别介绍了高级搜索的黄金组合和智能数据集管理方法,帮助研究者快速获取T1加权MRI、PET等多模态影像数据,提升科研效率。

weixin_29061465的博客 321

Codeforces 400D. Dima and Bacteria【并查集+最短路】

D. Dima and Bacteria time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Dima took up the biology of bacteria, as a resul

mengxiang000000 635

基于STM32F4XX 、HAL库的SHT40-CD1B-R3温湿度传感器驱动应用C语言程序设计

define SHT40_ADDR_READ 0x8B // CD1B 读地址 ((0x45 << 1) + 1)#define SHT40_ADDR_WRITE 0x8A // CD1B 写地址 (0x45 << 1)// 初始化 I2C1 (根据 CubeMX 生成的函数)// 湿度: -6%RH + 125%RH * (raw / 2^16)// 温度: -45°C + 175°C * (raw / 2^16)// 返回值: 0=成功, 1=失败(CRC错误或I2C通信错误)

PP_Cottage的博客 236

75、CAN总线收发器共模范围扩展与抗干扰芯片选型

摘要:本文探讨了CAN总线收发器共模范围扩展与抗干扰芯片选型的关键问题。作者通过风电场的实际案例,指出共模电压超标会导致总线故障甚至芯片损坏。文章分析了不同芯片(如SN65HVD1050、TJA1043等)的共模范围特性,并提供了电路设计建议,包括正确使用共模扼流圈和终端电阻。最后强调选型时要结合实际工况,在共模范围、功耗、速度和成本之间取得平衡,普通工业现场建议选择正负36V共模范围的芯片。

2401_88858637的博客 52

CodeForces 400D (最短路+并查集) Dima and Bacteria

这题真心不错。。考查了很多知识。。

大咸鱼。。。 1144

SAP-ABAP:字符与数值类型转换详细指南

SAP-ABAP:字符与数值类型转换详细指南

baidu_35680696的博客 1475

codeforces D.Dima and Bacteria (floyd+并查集) 好题

题目链接:Dima and Bacteria Dima took up the biology of bacteria, as a result of his experiments, he invented ktypes of bacteria. Overall, there are n bacteria at his laboratory right now, and the number ...

pxlsdz的博客 774

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Codeforces 400D Dima and Bacteria(Floyd+并查集)

题目链接:Codeforces 400D Dima and Bacteria 题目大意:给出n,m和k,表示有n个细菌,m种仪器和k种细菌,给出k种细菌的数量ci,然后每个细菌按照种类排成一排(所以有第i种细菌的序号从∑(1≤j≤i-1)cj + 1 到∑(1≤j≤i)cj);接下来给出m种仪器,有u,v,x三个值,表示说从可以在第u,v号细菌之间移动能量,代价为x。请帮助博士判断说这些

不慌不忙、不急不躁 1812

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

codeforces 400 D Dima and Bacteria【并查集 Floyd】

题意:给出n个点,分别属于k个集合,判断每个集合里面的点的距离都为0,为0的话输出yes,并输出任意两个集合之间的最短路 这道题目有两个地方不会处理, 先是n个点,分别属于k个集合,该怎么记录下来这里, 然后就是判断每个集合里面的点的距离是否为1,这里可以用并查集来做,如果在输入点的时候,距离为0,就将这两点合并 最后判断每个点,如果他们同属于一个集合,判断它俩的根是否一样就可以了 ...

weixin_30692143的博客 175

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

codeforces 400D Dima and Bacteria 并查集+floyd

题目链接:http://codeforces.com/problemset/problem/400/D 题目大意:   给定n个集合,m步操作,k个种类的细菌,   第二行给出k个数表示连续的xi个数属于i集合。   当某个种类之间两两交换的值都为0可行解,则输出所有种类之间交换的最小值;否则输出No 解题思路:当两点之间的距离为0时并查集到一个集合中,只需保证最终同一种类的细菌都在一个...

weixin_34040079的博客 139

Codeforces Round #234 (Div. 2) D. Dima and Bacteria · 并查集+Floyd

题解 题意:n个集合,在满足集合内各个点的距离为0的条件下,求集合间的最短路 #include <bits/stdc++.h> using namespace std; const int N = 1e6 + 10; const int INF = 0x3f3f3f3f; int c[N]; int n, m, K; int fa[N]; int d[505][505]; in...

Yubing792289314的博客 258

并查集 + Floyd

题目:Codeforces Round #234  D. Dima and Bacteria 题目链接:http://codeforces.com/contest/400/problem/D 题目意思:有n个病菌分为k个种类,n个病菌编号为1-n,k个种类编号为1-K。把能量从一个细菌运送到另一个细菌需要消耗代价x。问题有两问:1、同一种类任意两个细菌运送能量消耗是否为零。2、不同种类之间

小乞丐的小角落~ 712

Codeforces400D Dima and Bacteria

并查集+Floyd

a free man 653

Codeforces 400D Dima And Bacteria 暴力+Floyd

题意:n点,m条带权边的无向图,每个顶点属于k类中的某一类,定义合法,同一类中的任意两点存在代价为0的路径,若合法,求出d[i][j]矩阵,表示第i类到第j类的最小代价. n,m 同一个类有c[i]个点 则要有c[i]*(c[i]-1)/2条权值为0的路径.相同type转化时,不会经过非0边 首先把边权为0两个端点扔到同一个联通分量中,算出该联通分量中每个type的个数,更新该typ

Masamiiiiii 451

Codeforces 400D Dima and Bacteria 【并查集 + 最短路】

题目链接:Codeforces 400D Dima and Bacteria

世界很大 528

codeforces 400D - Dima and Bacteria

题目链接:http://codeforces.com/problemset/problem/400/D 题目大意:n个培养基,m种仪器,分成k种,每种细菌数量c[i],然后就给出从第i到第j个培养基转化需要的花费。判断同种培养基之间的转化是不是都是可以0花费,如果可以再输出不同种培养基之间转化的最小花费。 如果有疑惑的话,再以样例解释一下—— 4 4 2 1 3 2 3 0 3 4 0

happiness Onion 892

codeforces 400 D Dima and Bacteria

http://www.elijahqi.win/archives/1582 Dima took up the biology of bacteria, as a result of his experiments, he invented k types of bacteria. Overall, there are n bacteria at his laboratory right now...

Elijahqi 231

Codeforces 400 D.Dima and Bacteria(并查集+弗洛伊德)

题目:http://codeforces.com/contest/400/problem/D N个点,M条边,每条边有一个权值x,x可以为0。然后把这些点分成K组,给一个序列C,共K个数,C[i]>=1,按照编号1~N,1~C[1]为第一组,C[1]+1~C[2]为第2组,以此类推。 然后问每一组的点是否到同组其他点的最短路都是0,是输出Yes,否则输出No。 对于Yes的情况,还要输出一个

hongrock的专栏 785

Codeforces 400D Dima and Bacteria(并查集最短路)

题意:有n个k种细菌,每种细菌有ci个,各自标号为细菌之间(注意这里非种类之间)有m种转换关系,即u和v可相互转换,代价为x。若每种细菌内部可两两转换且代价为0,输出Yes,并且用矩阵输入各种类之间最小转换代价,不能转换的输出-1。否则输出No。思路:1、判断每种细菌内部可否两两转换且代价为0,可用并查集,对0边的两个细菌合并,最后判断每种细菌内部是否有共同祖先。2、各种类之间最小转换代价则用Fl...

weixin_30325971的博客 166
上一篇: codeforcesC. Posterized
下一篇: E. Pencils and Boxes codeforces(思维+dp)
PinappleMi
博客等级 码龄9年 10粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值