首页 > 其他分享 >2023.03.29总结

2023.03.29总结

时间:2023-04-03 13:44:25浏览次数:56  
标签:总结 le int 2023.03 29 fa xa 集合 对应

题目1:洛谷 P2024

题意

  • 有 \(n\) 个动物,每个动物都是 \(A,B,C\) 中的一种,其中 \(A\) 吃 \(B\),\(B\) 吃 \(C\),\(C\) 吃 \(A\)。给定两种食物链关系。

    • 第一种说法是 1 X Y,表示 \(X\) 和 \(Y\) 是同类。
    • 第二种说法是 2 X Y,表示 \(X\) 吃 \(Y\)。
  • 这两种关系有 \(k\) 条,一条关系是真话满足当前的话与前面所有的真话冲突不冲突,且 \(X,Y \le n\) 且 \(X \ne Y\)。请输出假话的数量。

  • \(1 \le n \le 5 \times 10^4,1 \le k \le 10^5\)。

思路

  • 这道题显然是并查集。令 \(i\) 对应的集合为与动物 \(i\) 同类的动物, \(i + n\) 对应的集合为 \(i\) 吃的动物, \(i + n + n\) 对应的集合为吃 \(i\) 的动物。

  • 如果当前关系为第一种,这条关系为真必须满足(为假答案数 \(+1\),以下只考虑了第一种情况,后两种自己判一下):

    • \(X\) 对应的集合不是 \(Y + n\) 对应的集合。
    • \(Y\) 对应的集合不是 \(X + n\) 对应的集合。
  • 否则如果是真话需满足:

    • \(X\) 对应的集合不是 \(Y + n\) 对应的集合。
    • \(Y\) 对应的集合不是 \(Y\) 对应的集合。
  • 如果当前关系为第一种且为真,将以下集合合并(为假答案数 \(+1\),以下只考虑了第一种情况,后两种自己判一下):

    • \(X\) 对应的集合不是 \(Y\) 对应的集合。
    • \(X + n\) 对应的集合不是 \(Y + n\) 对应的集合。
    • \(X + n\) 对应的集合不是 \(Y + n + n\) 对应的集合。
  • 如果当前关系为第二种种且为真,将以下集合合并:

    • \(X + n\) 对应的集合不是 \(Y\) 对应的集合。
    • \(X\) 对应的集合不是 \(Y + n + n\) 对应的集合。
    • \(X + n + n\) 对应的集合不是 \(Y + n\) 对应的集合。
  • 最后输出答案数即可。

  • 时间复杂度

    • 并查集维护合并操作:\(O(n \times log \ n)\)。
    • \(k\) 次询问:\(O(k)\)。
    • 总时间复杂度:\(O(n \times log \ n +k)\)
const int MAXN = 5e4 + 5;

int n, q, c, op, x, y, fa[MAXN * 3];

int Find(int x){
  return (fa[x] ? fa[x] = Find(fa[x]) : x);
}

int main(){
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> n >> q;
  for(int i = 1; i <= q; i++){
    cin >> op >> x >> y;
    if(x > n || y > n || (x == y && op == 2)){ //特判后两种情况
      c++;
      continue;
    }
    int xa = Find(x), ya = Find(y); // x, y 对应的集合的代表
    int xb = Find(x + n), yb = Find(y + n); // x + n, y + n 对应的集合的代表
    int xc = Find(x + n + n), yc = Find(y + n + n); // x + n + n, y = n + n 对应的集合的代表
    if(op == 1){
      if(xa == yb || xb == ya){ //假话
        c++;
      }else{ //真话
        fa[xa] = (xa == ya ? 0 : ya);
        fa[xb] = (xb == yb ? 0 : yb);
        fa[xc] = (xc == yc ? 0 : yc);
      }
    }else{
      if(xa == ya || yb == xa){ //假话
        c++;
      }else{ //真话
        fa[ya] = (ya == xb ? 0 : xb);
        fa[yb] = (xc == yb ? 0 : xc);
        fa[xa] = (xa == yc ? 0 : yc);
      }
    }
  }
  cout << c;
  return 0;
}

题目2:CSES 2101

题意

  • 有 \(n\) 个点,\(m\) 条无向边边和 \(q\) 组询问。每组询问给定两个点 \(x,y\),问 \(x,y\) 在加入第几条边后两个点从不连通到连通,如果加入 \(m\) 条边后仍不连通,输出 \(-1\)。

  • \(1 \le n, m, q \le 2 \times 10^5\)。

思路

  • 题意简化为:第 \(i\) 的边权为 \(i\),每组询问查询并查集建出森林后 \(x\) 到 \(x,y\) 的最近公共祖先 \(z\) 的路径上的边权最大值和 \(y\) 到 \(z\) 的路径上的边权最大值的最大值。

  • 找最近公共祖先可以下操作(找最近公共祖先时可以顺便求一下答案):

    • 若 \(x\) 的子树大小 \(\le\) \(y\) 的子树大小,\(x\) 变为 \(x\) 的父亲。否则 \(y\) 变为 \(y\) 的父亲。直到 \(x = y\)。
    • 如果 \(x\) 和 \(y\) 都是某个树的根但是还有往上走,就说明原先的 \(x,y\) 不在同一个树内。
  • 时间复杂度

    • 输入 \(m\) 条道路:\(O(m)\)。
    • 并查集维护合并集合:\(O(n \times log \ n)\)。
    • \(q\) 组询问,每组询问 \(x,y\) 最多往上跳 \(log \ n\) 次,时间复杂度:\(O(q \times log \ n)\)。
    • 总时间复杂度:\(O(m + (n + q) \times log \ n)\)。

标签:总结,le,int,2023.03,29,fa,xa,集合,对应
From: https://www.cnblogs.com/xhr0817-blog/p/17274342.html

相关文章

  • Java-String的常用方法总结
    一、String类  String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不能继承。String类对象创建后不能修改,由0或多个字符组成,包含在一对双引号之间。二、String类构造方法  1、publicString()  无参构造方法,用来创......
  • Vue3【Axios网络请求(GET、POST 、并发请求、全局配置 )】(八)-全面详解(学习总结---从入
    ......
  • Vue3【Transition(效果、CSS 过渡、使用animation、TransitionGroup、 KeepAlive、Tele
    ......
  • 校内天梯赛总结
    1107:ZN的随机数#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intans;intmain(){lln,m;while(cin>>n)//在while中赋值{ans=0;boola[1001]={0};for(inti=0;i<n;i++){intx;cin&g......
  • 【组会】water_on_floor_image & 总结
    实验场景channel1channel4文章内容用到的特征机器学习算法OnTheFeasibilityofEstimatingSolubleSugarContentUsingMillimeter-wave60GHz毫米波信号,估计水果中可溶性糖含量(SSC)的可行性RSS,表面粗糙程度,最大幅度值,峰值之间的时间,频域中的通道功率LR,RF......
  • 开源项目总结(产品)
      总结下工作中拿来就能上线使用的一些开源项目,他们能够很好的满足我们的需求,无需从0到1进行开发,快速部署上线,同时可根据实际业务进行二次开发 [电商系统]1.Magento2介绍: 世界排名第一的开源电商系统开发语言:PHP项目地址: magento/magento2中文站: https://www.mall......
  • 每日总结2023-04-02
    今天完成了厂商端 1.登录界面  2.查看数据界面,在此界面商家收到通知增加待完成选项,并选择是否准备好以及完成。   3.个人信息界面,可以保存个人信息 ......
  • ABC295(D~G)
    Tasks-AtCoderBeginnerContest295这篇是超级抽象的简要tj,看不懂不要骂我这个蒟蒻QWQD-ThreeDaysAgo(atcoder.jp)\(f_i\)表示\([1,i]\)的所有数的奇偶情况,如果\(b\)有奇数个,那么\(f_i|=2^b\),特别的,\(f_0=0\),答案就是\(\sum\limits_{i=1}^n\sum\limits_{j=0}^{i-1}......
  • AtCoder Beginner Contest 296
    AtCoderBeginnerContest296比赛连接好久没写题解了~~D-M<=ab题意就是给定N,M,求一个最小的数x同时满足x>=M且x=a*b(a<=N,b<=N);N,M<=1e12开始脑瘫想了二分,仔细一想很明显x不满足单调性,想了下暴力的时间复杂度巨大...纠结了一会,发现因子最大是sqrt(m),只需要枚举一下因......
  • 2024届计算机秋招100天备战:力扣每日打卡挑战全记录 & 面试题总结
    最近两个月力扣困难题不再落下,打卡全满勤,激发了持续刷题的斗志。这里将持续记录打卡过程中的难题和面试八股。2023/4/21039.多边形三角剖分的最低得分题目大意:多边形每个节点有一个数值,将多边形三角剖分,得分为所有三角形节点乘积之和。求三角剖分后的最低得分。做题评价:虽......