zoukankan      html  css  js  c++  java
  • 洛谷-P3919-可持久化数组

    题目传送门

    sol:在洛谷上看到一种dfs + 离线的方法,可以解决大部分可持久化问题。把依赖关系看成边,然后建树。这样本来要解决的多个版本只要在一个版本上进行修改就好了。

    • 离线 + dfs
      #include <bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      typedef pair<int, int> PII;
      const int MAXN = 1e6 + 10;
      vector<int> edge[MAXN];
      int a[MAXN], b[MAXN], c[MAXN], d[MAXN];
      int ans[MAXN];
      void dfs(int u) {
          int tmp = a[c[u]];
          if (b[u] == 1) a[c[u]] = d[u];
          else ans[u] = tmp;
          for (auto v : edge[u]) dfs(v);
          a[c[u]] = tmp;
      }
      int main() {
          int n, m;
          scanf("%d%d", &n, &m);
          for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
          for (int i = 1; i <= m; i++) {
              int fa; scanf("%d", &fa);
              edge[fa].push_back(i);
              scanf("%d%d", &b[i], &c[i]);
              if (b[i] == 1) scanf("%d", &d[i]);
          }
          dfs(0);
          for (int i = 1; i <= m; i++) {
              if (b[i] == 2)
                  printf("%d
      ", ans[i]);
          }
          return 0;
      }
  • 相关阅读:
    第一个爬虫和测试
    乒乓球比赛模拟分析
    appium入门
    node安装
    自动化测试---selenium
    自动化测试---元素定位
    Shell脚本
    Shell脚本的编写
    Linux安装jdk,mysql,tomcat
    Linux的简单使用
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/12052620.html
Copyright © 2011-2022 走看看