首页 > 其他分享 >UER #1

UER #1

时间:2024-10-02 21:00:16浏览次数:1  
标签:sz cnt int top Add using UER

A. 猜数

题目描述

给定 \(g,l\),满足 \(gl=ab\),且 \(a,b\) 是 \(g\) 的倍数。求 \(a+b\) 的最小/大值。

思路

根据积一定差小和小,最小值为 \(2\sqrt {g\cdot l}\),最大值为 \(g+l\)。

时空复杂度均为 \(O(1)\)。

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

int t;
ll a, b;

void Solve() {
  cin >> a >> b;
  cout << 2ll * a * (ll)sqrt(b / a) << " " << a + b << "\n";
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  for(cin >> t; t--; Solve()) {
  }
  return 0;
}

C. DZY Loves Graph

题目描述

有 \(N\) 个点,\(M\) 次操作。对于第 \(i\) 次操作有:

  • 在 \(a,b\) 之间建一条边权为 \(i\) 的边。
  • 撤销最新建的 \(k\) 条边。
  • 撤销 \(i-1\) 次操作,保证 \(i-1\) 次操作不为此操作。

请在每次操作后求出最小生成树的边权之和。

思路

我们可以用栈记录当前仍然有效的 1 操作和当时的生成树边权之和和生成树的边的数量。但为了避免这种情况:

Add
Add
...
Delete
Return
Delete
Return
...

我们要记录一个 \(k\),表示当前有 \(k\) 个未处理的撤销。在有新的 Add 操作之前,我们可以直接访问之前的答案。如果有 Add,那么就一个一个处理撤销。因为此时已经不可能再去 Return 之前的 Delete 了。使用可撤销化并查集。

空间复杂度 \(O(N+M)\),时间复杂度 \(O(M\log N)\)。

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;

const int MAXM = 500001, MAXN = 300001;

struct query {
  string op;
  int a, b;
}a[MAXM];

int n, m, f[MAXN], sz[MAXN], k, cnt[MAXM], stk[MAXN], top;
ll sum[MAXM];
vector<pii> edge;

int getfa(int u) {
  return (f[u] == u ? u : getfa(f[u]));
}

bool Merge(int u, int v) {
  u = getfa(u), v = getfa(v);
  if(u != v) {
    if(sz[u] > sz[v]) {
      swap(u, v);
    }
    f[u] = v, sz[v] += sz[u];
    edge.emplace_back(u, v);
    return 1;
  }else {
    edge.emplace_back(0, 0);
    return 0;
  }
}

void Cancal() {
  auto [u, v] = edge.back();
  edge.pop_back();
  f[u] = u, sz[v] -= sz[u];
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  iota(f + 1, f + n + 1, 1);
  fill(sz + 1, sz + n + 1, 1);
  cnt[0] = n, sum[0] = 0;
  for(int i = 1; i <= m; ++i) {
    cin >> a[i].op;
    if(a[i].op == "Add") {
      cin >> a[i].a >> a[i].b;
      for(; k; k--, top--) {
        Cancal();
      }
      cnt[i] = cnt[stk[top]], sum[i] = sum[stk[top]];
      if(Merge(a[i].a, a[i].b)) {
        cnt[i]--;
        sum[i] += i;
      }
      stk[++top] = i;
      cout << (cnt[i] != 1 ? 0 : sum[i]) << "\n";
    }else if(a[i].op == "Delete") {
      cin >> a[i].a;
      k += a[i].a;
      cout << (cnt[stk[top - k]] != 1 ? 0 : sum[stk[top - k]]) << "\n";
    }else {
      if(a[i - 1].op == "Add") {
        k++;
        cout << (cnt[stk[top - k]] != 1 ? 0 : sum[stk[top - k]]) << "\n";
      }else {
        k -= a[i - 1].a;
        cout << (cnt[stk[top - k]] != 1 ? 0 : sum[stk[top - k]]) << "\n";
      }
    }
  }
  return 0;
}

标签:sz,cnt,int,top,Add,using,UER
From: https://www.cnblogs.com/yaosicheng124/p/18445081

相关文章

  • jQuery-Mobile-高级教程-全-
    jQueryMobile高级教程(全)原文:ProjQueryMobile协议:CCBY-NC-SA4.0零、简介我们目前正在见证企业和个人构建和分发移动应用的方式的转变。最初的策略是为每个主要平台构建单独的原生应用。然而,团队很快意识到维护多个平台是不可持续的,因为移动团队失去了灵活性。可以一次......
  • 37_初识搜索引擎_快速掌握query string search语法以及_all metadata原理揭秘
    1、querystring基础语法GET/test_index/test_type/_search?q=test_field:testGET/test_index/test_type/_search?q=+test_field:testGET/test_index/test_type/_search?q=-test_field:test一个是掌握q=field:searchcontent的语法,还有一个是掌握+和-的含义2、_allmetada......
  • 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)
    五,MyBatis-Plus当中的“ActiveRecord模式”和“SimpleQuery工具类”(详细实操)文章目录五,MyBatis-Plus当中的“ActiveRecord模式”和“SimpleQuery工具类”(详细实操)1.ActiveRecord模式2.ActiveRecord介绍2.1ActiveRecord实现3.SimpleQuery工具类3.1SimpleQuer......
  • 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)
    五,MyBatis-Plus当中的“ActiveRecord模式”和“SimpleQuery工具类”(详细实操)@目录五,MyBatis-Plus当中的“ActiveRecord模式”和“SimpleQuery工具类”(详细实操)1.ActiveRecord模式2.ActiveRecord介绍2.1ActiveRecord实现3.SimpleQuery工具类3.1SimpleQuery介绍3.2list......
  • 【前端】-jQuery(带你让你深入了解学习使用jQuery)
    引言: jQuery是一个轻量级的JavaScript库,自2006年发布以来,它迅速成为Web开发中不可或缺的工具。它通过提供简洁的语法和强大的功能,简化了HTML文档操作、事件处理、动画效果以及AJAX请求的实现。jQuery允许开发者以更少的代码实现复杂的任务,提升开发效率。此外,jQu......
  • Can you answer these queries III(单点修改线段树)
    因为洛谷出现UE在acwing提交,输入格式略有修改#include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefvector<string>VS;typedefvector<int>......
  • 前端必知必会-jQuery遍历DOM函数
    文章目录jQuery遍历元素什么是遍历?jQuery遍历-祖先遍历DOM树jQueryparent()方法jQueryparents()方法jQueryparentsUntil()方法总结jQuery遍历元素什么是遍历?jQuery遍历,即“移动”,用于根据HTML元素与其他元素的关系“查找”(或选择)HTML元素。从一......
  • 前端必知必会- jQuery - 尺寸函数
    文章目录jQuery-尺寸jQuerywidth()和height()方法jQueryinnerWidth()和innerHeight()方法jQueryouterWidth()和outerHeight()方法jQuery更多width()和height()总结jQuery-尺寸使用jQuery,可以轻松处理元素和浏览器窗口的尺寸。jQuery尺寸方......
  • 前端必知必会-jQuery - 获取和设置 CSS 类
    文章目录jQuery-获取和设置CSS类jQueryaddClass()方法jQueryremoveClass()方法jQuerytoggleClass()方法jQuery-css()方法返回CSS属性设置CSS属性设置多个CSS属性总结jQuery-获取和设置CSS类使用jQuery,可以轻松操作元素的样式。jQuery操......
  • jquery中判断图片是否存在的实现代码
    有时候我们需要判断当前的图片是否存在,方便后期做一些操作,当然也可以参考上一篇文章,如果不存在就替换位默认图片functionisHasImg(src){varimg=newImage();img.src=src;img.onload=function(){if(img.width>0||img.height>0){......