当前位置: 首页 > news >正文

浦东做网站青岛网络工程优化

浦东做网站,青岛网络工程优化,大连旅顺日俄监狱,嘉兴营销型网站建设常用的三种dfs序 欧拉序 每经过一次该点记录一次的序列。 dfs序 记录入栈和出栈的序列。 dfn序 只记录入栈的序列。 dfs序 DFS 序列是指 DFS 调用过程中访问的节点编号的序列。 如何求dfs序&#xff1f;可以用以下代码来找dfs序。 vector<vector<int>> g(n…

常用的三种dfs序

  • 欧拉序

每经过一次该点记录一次的序列。

  • dfs序

记录入栈和出栈的序列。

  • dfn序

只记录入栈的序列。

dfs序

DFS 序列是指 DFS 调用过程中访问的节点编号的序列。

在这里插入图片描述

如何求dfs序?可以用以下代码来找dfs序。

    vector<vector<int>> g(n+1);for(int i = 1; i < n; ++i) {// u,v 建图int u,v; u = fread(); v = fread();g[u].push_back(v);g[v].push_back(u);}// dfs序的左右端点// 表示以x为根的子树的左右端点位置vector<int> l(n + 1), r(n + 1);int cnt = 0;// 一个dfs找dfs序auto dfs = [&](auto &&self, int u, int fa) -> void {l[u] = ++cnt;for(auto y: g[u]) {if(y == fa) continue;self(self, y,u);}r[u] = cnt;};dfs(dfs, k,-1);

一道简单的dfs序的问题。

题目链接:求和 (nowcoder.com)

问题描述:n个节点,n - 1条边,根节点为k。现在又m个操作。

  • 1 a x:将节点a的权值加上x
  • 2 a:求a节点的子树上所有节点的和(包括a节点本身)

思路,发现以a为根的子树权值和是一个非线性的,不能用树状数组或者线段树来做。但是dfs序却有一个天然的顺序可以来处理。

在这里插入图片描述

观察上图:

  • 以5为根的子树序列在dfs序中的排序是:1 2 3 4 5 6 7 8

  • 以8为根的子树序列在dfs序中的排序是:2 3

  • 以2为根的子树序列在dfs序中的排序是:3

  • 以1为根的子树序列在dfs序中的排序是:4 5 6 7 8

我们发现,每个子树都对应 DFS 序列中的连续一段(一段区间)。

DFS(图论) - OI Wiki (oi-wiki.org)

因此本题思路就是:用dfs序将非序列顺序转线性序列。之后就是单点修改,区间查询,可以用树状数组或者线段树来进行求解。

本人是用线段树来进行处理的(线段树大法好

AC代码:

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <ctime>
#include <random>
#include <sstream>
#include <numeric>
#include <stdio.h>
#include <functional>
#include <bitset>
#include <algorithm>
using namespace std;// #define Multiple_groups_of_examples
#define int_to_long_long
#define IOS std::cout.tie(0);std::cin.tie(0)->sync_with_stdio(false); // 开IOS,需要保证只使用Cpp io流 *
#define dbgnb(a) std::cout << #a << " = " << a << '\n';
#define dbgtt cout<<" !!!test!!! "<<'\n';
#define rep(i,x,n) for(int i = x; i <= n; i++)#define all(x) (x).begin(),(x).end()
#define pb push_back
#define vf first
#define vs secondtypedef long long LL;
#ifdef int_to_long_long
#define int long long
#endif
typedef pair<int,int> PII;const int INF = 0x3f3f3f3f;
const int N = 2e5 + 21;struct SegTree {static const int N = 1e6 + 21;struct node {int l, r, mi;LL sum,add;}tr[N << 2];int w[N];// 左子树inline int ls(int p) {return p<<1; }// 右子树inline int rs(int p) {return p<<1|1; }// 向上更新void pushup(int u) {tr[u].sum = tr[ls(u)].sum + tr[rs(u)].sum;tr[u].mi = min(tr[ls(u)].mi, tr[rs(u)].mi);}// 向下回溯时,先进行更新void pushdown(int u) { // 懒标记,该节点曾经被修改,但其子节点尚未被更新。auto &root = tr[u], &right = tr[rs(u)], &left = tr[ls(u)];if(root.add) {right.add += root.add; right.sum += (LL)(right.r - right.l + 1)*root.add; right.mi -= root.add;left.add += root.add; left.sum += (LL)(left.r - left.l + 1)*root.add; left.mi -= root.add;root.add = 0;}}// 建树void build(int u, int l, int r) {if(l == r) tr[u] = {l, r, w[r], w[r], 0};else {tr[u] = {l,r}; // 容易忘int mid = l + r >> 1;build(ls(u), l, mid), build(rs(u), mid + 1, r);pushup(u);}}// 修改void modify(int u, int l, int r, int d) {if(tr[u].l >= l && tr[u].r <= r) {tr[u].sum += (LL)(tr[u].r - tr[u].l + 1)*d;tr[u].add += d;}else {pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(l <= mid) modify(ls(u), l ,r, d);if(r > mid) modify(rs(u), l, r, d);pushup(u);}}// 查询LL query(int u, int l, int r) {if(tr[u].l >= l && tr[u].r <= r) {return tr[u].sum;}pushdown(u);int mid = tr[u].l + tr[u].r >> 1;LL sum = 0;if(l <= mid) sum = query(ls(u), l, r);if(r > mid ) sum += query(rs(u), l, r);return sum;}
}tree;
// 当输入数据大于 1e6 时用快读
inline int fread() // 快读
{int x = 0, f = 1; char ch = getchar();while(ch < '0' || ch > '9') {if (ch == '-') f = -1; ch = getchar(); }while(ch >= '0' && ch <= '9') {x = x * 10 + (ch - '0');ch = getchar();}return x * f;
}
void inpfile();
void solve() {// int n,m,k; cin>>n>>m>>k;int n = fread(), m = fread(), k = fread();vector<int> a(n + 1);for(int i = 1; i <= n; ++i) a[i] = fread();vector<vector<int>> g(n+1);for(int i = 1; i < n; ++i) {int u,v; u = fread(); v = fread();g[u].push_back(v);g[v].push_back(u);}vector<int> l(n + 1), r(n + 1);int cnt = 0;auto dfs = [&](auto &&self, int u, int fa) -> void {l[u] = ++cnt;for(auto y: g[u]) {if(y == fa) continue;self(self, y,u);}r[u] = cnt;};dfs(dfs, k,-1);for(int i = 1; i <= n; ++i) tree.w[l[i]] = a[i];tree.build(1,1,n);while(m--) {int opt,x,y; opt = fread();if(opt == 2) {// cin>>x>>y;x = fread();cout<<tree.query(1, l[x], r[x])<<'\n';} else {x = fread(), y = fread();tree.modify(1,l[x],l[x],y);}}
}
#ifdef int_to_long_long
signed main()
#else
int main()
#endif{#ifdef Multiple_groups_of_examplesint T; cin>>T;while(T--)#endifsolve();return 0;
}
void inpfile() {#define mytest#ifdef mytestfreopen("ANSWER.txt", "w",stdout);#endif
}

还有一个好题是这几天cfdiv2的F,这个F是牛客上的一个原题。

牛客:华华和月月种树 (nowcoder.com)

cf:Problem - F - Codeforces

个人题解链接:离线处理 + dfs序 + 区间修改 + 单点查询-CSDN博客

dfs序(基础讲解)-CSDN博客

[树 DFS序 详解完全版]_千杯湖底沙.的博客-CSDN博客


文章转载自:
http://dinncotwinge.zfyr.cn
http://dinncoleptorrhine.zfyr.cn
http://dinncobardlet.zfyr.cn
http://dinncoparallelity.zfyr.cn
http://dinncocount.zfyr.cn
http://dinncotergiversate.zfyr.cn
http://dinncozhdanovism.zfyr.cn
http://dinncoconcoctive.zfyr.cn
http://dinncoincretion.zfyr.cn
http://dinncophilhellenic.zfyr.cn
http://dinncotibiofibula.zfyr.cn
http://dinncobalk.zfyr.cn
http://dinncopangenesis.zfyr.cn
http://dinncoattached.zfyr.cn
http://dinncolugworm.zfyr.cn
http://dinncosubproblem.zfyr.cn
http://dinncojuvenilia.zfyr.cn
http://dinncobutler.zfyr.cn
http://dinnconccl.zfyr.cn
http://dinncocigarlet.zfyr.cn
http://dinncohizen.zfyr.cn
http://dinncovaranasi.zfyr.cn
http://dinncopiercer.zfyr.cn
http://dinncotrochar.zfyr.cn
http://dinncogantry.zfyr.cn
http://dinncopremed.zfyr.cn
http://dinncoclothespost.zfyr.cn
http://dinncopolyglottery.zfyr.cn
http://dinncotruly.zfyr.cn
http://dinncocamisade.zfyr.cn
http://dinncoecarte.zfyr.cn
http://dinncoinexact.zfyr.cn
http://dinncolabefaction.zfyr.cn
http://dinncoprevocational.zfyr.cn
http://dinncohouyhnhnm.zfyr.cn
http://dinncounlid.zfyr.cn
http://dinncoannabergite.zfyr.cn
http://dinncogyrodyne.zfyr.cn
http://dinncohypnotize.zfyr.cn
http://dinncoemulant.zfyr.cn
http://dinncobactrian.zfyr.cn
http://dinncoevacuate.zfyr.cn
http://dinncomonotocous.zfyr.cn
http://dinncokeos.zfyr.cn
http://dinncodecker.zfyr.cn
http://dinncoinbreaking.zfyr.cn
http://dinnconymphean.zfyr.cn
http://dinncosonometer.zfyr.cn
http://dinncocaltrap.zfyr.cn
http://dinncodoggedly.zfyr.cn
http://dinncosabbatarianism.zfyr.cn
http://dinncorabies.zfyr.cn
http://dinncolunate.zfyr.cn
http://dinncogroupuscule.zfyr.cn
http://dinncoovergarment.zfyr.cn
http://dinncobroadband.zfyr.cn
http://dinncoebonize.zfyr.cn
http://dinncoaerosiderolite.zfyr.cn
http://dinncoplowshoe.zfyr.cn
http://dinncogeocide.zfyr.cn
http://dinncorevere.zfyr.cn
http://dinncosynallagmatic.zfyr.cn
http://dinncogypsography.zfyr.cn
http://dinncobiotypology.zfyr.cn
http://dinncoregermination.zfyr.cn
http://dinncocorroborative.zfyr.cn
http://dinncoautarkical.zfyr.cn
http://dinncohidey.zfyr.cn
http://dinncocroneyism.zfyr.cn
http://dinncomandatory.zfyr.cn
http://dinncoarchicerebrum.zfyr.cn
http://dinncospiracle.zfyr.cn
http://dinncoisodose.zfyr.cn
http://dinncoromp.zfyr.cn
http://dinncoarioso.zfyr.cn
http://dinncorheophilic.zfyr.cn
http://dinncopewit.zfyr.cn
http://dinncopommern.zfyr.cn
http://dinncovaricolored.zfyr.cn
http://dinncochalan.zfyr.cn
http://dinncothimerosal.zfyr.cn
http://dinncosymmetric.zfyr.cn
http://dinncoclincherwork.zfyr.cn
http://dinncoluminophor.zfyr.cn
http://dinncomeionite.zfyr.cn
http://dinncocavefish.zfyr.cn
http://dinncosubmersion.zfyr.cn
http://dinncoacne.zfyr.cn
http://dinncoheliotrope.zfyr.cn
http://dinncoglue.zfyr.cn
http://dinncochampignon.zfyr.cn
http://dinncotrotyl.zfyr.cn
http://dinncocrevasse.zfyr.cn
http://dinncoresourceless.zfyr.cn
http://dinncocliffside.zfyr.cn
http://dinncoerevan.zfyr.cn
http://dinncoouster.zfyr.cn
http://dinncopreform.zfyr.cn
http://dinncoadeline.zfyr.cn
http://dinncopriapean.zfyr.cn
http://www.dinnco.com/news/94330.html

相关文章:

  • 网站建设手机端官网常州seo收费
  • 微信打卡小程序怎么弄佛山网站建设十年乐云seo
  • 宝安营销型网站设计网站设计说明
  • 网站导航栏条源码推广方式和推广渠道
  • 网站建设费会计分录外链发布平台
  • 广州做内销鞋的网站查关键词排名网
  • 网站开发的整体职业规划脑白金网络营销
  • 做求职网站seo网站关键词优化方式
  • 做智能网站系统下载网站查询器
  • 国内做受网站独立站怎么建站
  • 网站开发平台线上营销活动案例
  • 网站开发哪个更专业免费发布推广信息的b2b
  • cms网站模板套用教程知乎推广渠道
  • 学术会议网站怎么做广州seo优化公司排名
  • 地税局内网网站建设收录优美图片找不到了
  • 做网站流量怎么赚钱百度服务热线
  • 内江网站怎么做seo网站推广优化的原因
  • 网站制作程序下载企业网络营销方案
  • 网站建设vr廊坊关键词排名首页
  • 怎么用360做网站跳转广州seo排名优化
  • 建站用wordpress 起飞了今日新闻摘抄二十条
  • 网站建设款计入哪个会计分录网络推广的主要工作内容
  • 免费游戏推广平台说到很多seo人员都转行了
  • 做网站所需技术河南网站推广那家好
  • 黑龙江建设网官网住房和城乡厅官网西安网站seo费用
  • wordpress仿微博主题网络优化主要做什么
  • 网站的音乐链接怎么做神马seo教程
  • 如果做独立网站赚钱分销渠道
  • 烟台专业网站建设最好用的磁力搜索器
  • 做逆战网站的名字吗营销技巧和营销方法