leetcode 399除法求值 超水带权并查集

这篇具有很好参考价值的文章主要介绍了leetcode 399除法求值 超水带权并查集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

leetcode 399除法求值 超水带权并查集,leetcode,# 图,leetcode,哈希算法,算法
题目文章来源地址https://www.toymoban.com/news/detail-806442.html

class Solution {
public:
    int f[45];
    double multi[45];
    map<string,int>hash;int tot=0;
    int seek(int x){
        if(x==f[x]) return x;
        int fa=f[x];
        f[x]=seek(fa);
        multi[x]*=multi[fa];
        return f[x];
    }
    vector<double> calcEquation(vector<vector<string>>& equations, vector<double>& values, vector<vector<string>>& queries) {
        for(int i=0;i<equations.size();++i){
            vector<string> vec=equations[i];
            if(!hash.count(vec[0])) hash[vec[0]]=++tot,f[tot]=tot,multi[tot]=1.0;
            if(!hash.count(vec[1])) hash[vec[1]]=++tot,f[tot]=tot,multi[tot]=1.0;
        }
        for(int i=0;i<equations.size();++i){
            vector<string> vec=equations[i];
            int x=hash[vec[0]],y=hash[vec[1]];
            int rx=seek(x),ry=seek(y);
            if(rx==ry) continue;
            f[rx]=ry,multi[rx]=values[i]*multi[y]/multi[x];
        }
        vector<double>ans;
        for(int i=0;i<queries.size();++i){
            if(!hash.count(queries[i][0])||!hash.count(queries[i][1])) ans.push_back(-1);
            else{
                int x=hash[queries[i][0]],y=hash[queries[i][1]];
                int rx=seek(x),ry=seek(y);
                if(rx!=ry) ans.push_back(-1);
                else ans.push_back(multi[x]/(multi[y]*multi[rx]));
            }
        }
        return ans;
    }
};

到了这里,关于leetcode 399除法求值 超水带权并查集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AcWing 算法基础课二 数据结构 链表 栈 队列 并查集 哈希表

    链表题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 AcWing. 826.单链表 双链表 AcWing 827.双链表 AcWing 828.模拟栈 AcWing 3302.表达式求值 AcWing 829. 模拟队列 AcWing 830.单调栈 AcWing 154.滑动窗口 AcWing 831. KMP字符串 AcWing 835. Trie字符串统计 AcWing 143. 最大异或对 AcWing 836.合并集合

    2024年02月15日
    浏览(50)
  • Leetcode:684. 冗余连接(并查集C++)

    目录 684. 冗余连接 题目描述: 实现代码与解析: 并查集 原理思路:         树可以看成是一个连通且  无环  的  无向  图。 给定往一棵  n  个节点 (节点值  1~n ) 的树中添加一条边后的图。添加的边的两个顶点包含在  1  到  n  中间,且这条附加的边不属于树中

    2024年02月13日
    浏览(38)
  • 【LeetCode】LeetCode 547. 省份数量(Java版 什么是并查集)

       📝个人主页:哈__ 期待您的关注  一、题目描述 有  n  个城市,其中一些彼此相连,另一些没有相连。如果城市  a  与城市  b  直接相连,且城市  b  与城市  c  直接相连,那么城市  a  与城市  c  间接相连。 省份  是一组直接或间接相连的城市,组内不含其他没

    2024年04月17日
    浏览(28)
  • LeetCode-200. 岛屿数量【深度优先搜索 广度优先搜索 并查集 数组 矩阵】

    给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 示例 1: 输入:grid = [ [“1”,“1”,“1”,“

    2024年04月14日
    浏览(39)
  • 【leetcode 力扣刷题】数学题之除法:哈希表解决商的循环节➕快速乘求解商

    题目链接:166. 分数到小数 题目内容: 题目是要我们把一个分数变成一个小数,并以字符串的形式返回。按道理,直接将分子numerator除以分母denominator就得到了小数,转换成string返回就好。题目要求里指出了特殊情况—— 小数部分如果有循环,就把循环节括在括号里 。 那么

    2024年02月10日
    浏览(39)
  • 【蓝桥模板】——如何用7行代码,优雅地拿捏并查集?(并查集模板)

    全文目录🧭 👩‍👩‍👦并查集-亲戚问题 🚀传送锚点​  💡思路点拨 🍞代码详解   👶🏻并查集-蓝桥幼儿园 🚀传送锚点  💡思路点拨 🍞代码详解   🌼并查集-合根植物 🚀传送锚点  💡思路点拨 🍞代码详解    🏰并查集-城邦 🚀传送锚点​​​​​​​  💡思

    2023年04月09日
    浏览(34)
  • 【模板】并查集

    并查集是解决两元素是否属于同一集合,将一个集合合并另一集合的数据结构。具体来说,我们使用数字代替集合,比如集合1,集合2.使用数组f[i]维护元素i属于的集合,比如f[2] = 4表示元素2属于集合4。具体我们有以下实现功能的代码 1 初始化表示集合的数组。     表示元素

    2024年01月25日
    浏览(35)
  • 并查集の进阶用法

    我们在处理问题的时候,可能会遇到一些需要维护每个元素所在的集合的问题,而并查集却恰好完美解决了这个问题。 对于普通的并查集,他支持的操作比较少,只有合并和查询,合并是指把两个集合合并成一个,而查询是询问两个元素是否在同一集合内;对于这两种操作,

    2024年02月02日
    浏览(42)
  • 数据结构---并查集

    这里可以使用生活中的一个例子来带着大家理解并查集,大家在上学的过程中肯定会发现一种现象,在开学之前大家谁也不认识谁每个人都是一个小团体,可是开学之后因为座位旁边有一个同桌,所以开学没多久你和同桌就会互相认识并且开心的玩在一起,那么这时就是两个

    2024年02月15日
    浏览(43)
  • 力扣--并查集547.省份数量

    思路分析: 首先定义变量 fa 用于记录并查集,以及城市数量 n 。 定义了并查集的两个函数, find 用于查找节点的根节点, togother 用于合并两个节点所在的集合。 在公共函数 findCircleNum 中,初始化并查集,然后遍历 isConnected 数组,将相连的城市进行合并。 最后使用 visited

    2024年03月26日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包