猫史档案馆


边城过客

边城过客

Lv.1

QQ频道:https://pd.qq.com/s/2phoyc 2301,2302届创委!

获赞:5296收藏:2943浏览:138004作品收藏:853

签名:点赞分:920 收藏分:1000 再创分:1000 不要 脸2023计划: 点赞:5675/5000 √2024.2.8 收藏:3094/3000 √2024.12.23 浏览:15w/15w √2025.5.26 粉丝:1600/1500 √2024.5.17 首页:4/5(包括协作) 称号:大佬/大佬 √2022.12.14

回复帖子评论
上一页3 页 / 共 4下一页

我设计了一款积木,希望官方能来看看 中回复

shequ.cod喵/community/535709

2023-04-09T14:24:59 点赞:0

【创委】关于首页问题统一回复和首页问题反馈 中回复

关于首页大家也别吐槽了,真的就是我们也很注意,但我们只是推荐,上还是不上我们决定不了,就像是大家说风气不好,但实际上风纪能做的和我们大家没什么区别。

2023-04-09T14:50:28 点赞:3

提议:双向奔赴【bcm与创作者】 中回复

shequ.cod喵/community/535709

2023-04-09T14:54:25 点赞:0

【创委】关于首页问题统一回复和首页问题反馈 中回复

ddd

 

2023-04-09T17:14:35 点赞:0

【创委】关于首页问题统一回复和首页问题反馈 中回复

ddd

2023-04-10T19:41:30 点赞:0

有大佬能帮我找下这段错误吗? 中回复

这个简单,这段代码缺少一个左大括号 {,应该改为:

world.onChat(async ({ entity, message }) => {
    if (message === '/tp') {
        const gethc = await entity.player.dialog({
            type: Box3DialogType.SELECT,
            content: "请选择传送的地方",
            title: "传送系统",
            options: ["出生岛", "家园", "资源"],
        })
        if (!gethc) return;
        if (gethc.index == 0) {
            entity.position.set(1, 1, 1)
        }
        if (gethc.index == 1) {
            entity.player.dialog({
                type: Box3DialogType.TEXT,
                content: "请稍后",
                title: "家园",
            })
        }
        if (gethc.index == 2) {
            entity.player.dialog({
                type: Box3DialogType.TEXT,
                content: "资源区正在加载中",
                title: "资源1区",
            })
        }
    }
})

2023-04-10T20:25:35 点赞:1

彩虹字生成器 中回复

2023-04-10T20:30:26 点赞:0

【创委】关于首页问题统一回复和首页问题反馈 中回复

ddd

2023-04-13T00:25:24 点赞:1

【创委】关于首页问题统一回复和首页问题反馈 中回复

ddd

2023-05-03T22:05:51 点赞:1

【时间胶囊】来自2023年1月14号的一封信 中回复

挖了

2023-05-14T20:57:37 点赞:0

三道编程题(编写程序) 中回复

#1

import random

p = input()
ad = input()
n = int(input())

len1 = len(p)
len2 = len(ad)

# 在文章中随机插入广告,但广告不能嵌套
for i in range(n):
idx = random.randint(0, len1)
# 若广告不能插入,则重选位置
while ad in p[idx:idx+len2]:
idx = random.randint(0, len1)
p = p[:idx] + ad + p[idx:]

print(p)

#2

p = input()
ad = input()
n = int(input())
vip = int(input())

len1 = len(p)
len2 = len(ad)

# 直接替换所有广告
if vip == 1:
gp = p.replace(ad, '')
else:
for i in range(n):
idx = random.randint(0, len1)
while ad in p[idx:idx+len2]:
idx = random.randint(0, len1)
p = p[:idx] + ad + p[idx:]
gp = p

print(gp)

#3

import math

p = input()
ad = input()
n = int(input())
vip = int(input())

len1 = len(p)
len2 = len(ad)

# 判断vip是否为质数
if vip < 2 or any(vip % i == 0 for i in range(2, int(math.sqrt(vip))+1)):
gp = p
else:
for i in range(n):
idx = random.randint(0, len1)
while ad in p[idx:idx+len2]:
idx = random.randint(0, len1)
p = p[:idx] + ad + p[idx:]
gp = p

print(gp)

2023-05-14T21:01:38 点赞:0

统计没有退猫的人们(不能发布多次回帖,没人一次) 中回复

 。

2023-05-20T19:08:35 点赞:0

找师傅找师傅 中回复

 。

2023-05-20T20:30:59 点赞:0

找师父,求求了 中回复

 。

2023-05-20T20:32:39 点赞:0

求助!求助!怎么用画笔做光的反射模拟引擎? 中回复

说得好,顶一下吧

2023-05-20T21:03:09 点赞:0

【Python作品分享】新的作品【教程贴】 中回复

说得好,顶一下吧

2023-05-20T21:03:39 点赞:0

你们有谁没去过斗兽场 中回复

说得好,顶一下吧

2023-05-20T21:10:30 点赞:0

一个综合练习网站)))))))))))))))))) 中回复

说得好,顶一下吧

2023-05-20T21:11:25 点赞:0

工作室动图(尽力了) 中回复

说得好,顶一下吧

2023-05-20T23:00:07 点赞:0

加入我们工作室吧!!!!!!!! 中回复

说得好,顶一下吧

2023-05-20T23:00:12 点赞:0

【玩法】大家把自己的名字用百度翻译持续生喵得出来的结果是什么?(生喵过程自己定就行了) 中回复

Border City Passengers

边境城市乘客

离谱。。。

2023-06-02T09:34:23 点赞:0

《当你用键盘打出zbh》 中回复

准备好

2023-06-03T11:25:42 点赞:1

NOC复赛!加油! 中回复

结束喽(((

2023-06-03T11:27:48 点赞:0

这个怎么找? 中回复

新版本删除了,只要使用物理积木自动就开启了(感觉新版本的物理积木不好用)

2023-06-03T12:05:03 点赞:0

云Talk内测中~ 中回复

我逝逝(((

2023-06-03T14:37:27 点赞:0

云Talk内测中~ 中回复

2023-06-03T15:15:29 点赞:0

云Talk内测中~ 中回复

2023-06-03T15:19:33 点赞:0

把26个英文字母用中文输入法打一遍是什么 中回复

ABC的风格hi健康辣妈你哦脾气日视图v我血压在

2023-06-03T15:31:14 点赞:0

关于源码编辑器积木执行速度…… 中回复

这不增了吗(doge)

2023-06-03T19:51:23 点赞:1

关于树链剖分 中回复

这段程序是一段使用了树链剖分和线段树的树上路径修改和查询问题。这个程序有几个函数,其中主要的有:

1. edge(int U, int V):建图函数,将边从U和V连起来。

2. dfs1(int u, int fa):深度优先遍历,算出每个节点的子树大小和父节点。

3. dfs2(int u, int fa, int top):深度优先遍历,算出每个节点所在重链的重喵、重链头、在线段树中的位置以及建出对应的数组 w。

4. build(int l, int r, int p):递归建树,建立一个表示区间 [l, r] 的线段树,其中第 p 层对应的区间为 [tree[p].l, tree[p].r],并将区间中所有元素值存放在 tree[p].dat 中。

5. pushdown(int p):处理懒标记,将 tree[p].add 更新到左右喵的 tree[ls(p)].add 和 tree[rs(p)].add 中,并将对应区间加上该值。

6. change(int p, int l, int r, int k):将区间 [l, r] 的值都加上 k。如果当前节点对应的区间完全覆盖了目标区间,则将当前节点的值加上 k;否则递归向左右喵寻找覆盖目标区间的节点。

7. query(int p, int l, int r):查询区间 [l, r] 的值的和。如果当前节点对应的区间完全被包含在目标区间中,则直接返回该节点的值;否则递归向左右喵寻找与目标区间有重叠的节点,并将每个节点的值累加起来返回。

8. addTree(int u, int v, int w):将路径 u 到 v 上的所有节点的值都加上 w。先找到 u 和 v 同一重链的节点,然后逐一向上修改即可。

9. queryTree(int u, int v):查询路径 u 到 v 上所有节点的值的和。与 addTree 类似,先找到两个节点同一重链的节点,然后逐一向上查询并累加。最后返回累加结果。

10. main():程序入口,首先读入 N,M,R,P 和数组 w,然后建图、树剖、线段树建树,最后逐一处理输入的操作。

修改主要包括:

1. 需要用到的头文件可能不够,需要添加或者删减头文件。

2. 建议修改变量名,使其更能体现变量的含义。例如: w 数组可以改名为 weight 、cnt 可以改名为 idx 等等。

3. pushdown 函数中的 tree[p].add%=k 这一语句应该改为 tree[p].add%=P 。

4. addTree 函数中的 swap(u,v) 应该改为 swap(Hd[u], Hd[v]) ,因为 u 和 v 在函数内可能会被修改,而 Hd[u] 和 Hd[v] 对应的重链头节点不会变化。另外,在答案计算时应先将 ret 取模再累加,否则结果可能会溢出。

5. change 函数和 query 函数中用到了 long long 类型,但是在这些函数的返回值类型中没有使用 long long ,需要注意。

代码如下:

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

const int maxn=1e5+10,inf=0x3f3f3f3f;

template<typename T> inline void read(T&x){
    x=0;char c=getchar();bool flag=false;
    while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
    while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    if(flag)x=-x;
}

struct SegmentTree{
    int l,r;
    long long dat,add;
}tree[maxn<<2];

int N,M,R,P,w[maxn],cnt,head[maxn],son[maxn],dep[maxn],
fa[maxn],siz[maxn],top[maxn],Hd[maxn],dfn[maxn],rk[maxn];

struct Edge{
    int to,next;
}edge[maxn<<1];

void edge(int U,int V){
    edge[++cnt].to=V;
    edge[cnt].next=head[U];
    head[U]=cnt;
}

void dfs1(int u,int Fa){
    fa[u]=Fa;siz[u]=1;dep[u]=dep[Fa]+1;
    for(int i=head[u];~i;i=edge[i].next){
        int v=edge[i].to;
        if(v==Fa)continue;
        dfs1(v,u);
        siz[u]+=siz[v];
        if(siz[v]>siz[son[u]])son[u]=v;
    }
}

void dfs2(int u,int Fa,int Top){
    top[u]=Top;dfn[u]=++cnt;rk[cnt]=u;Hd[u]=cnt;
    if(son[u])dfs2(son[u],u,Top);
    for(int i=head[u];~i;i=edge[i].next){
        int v=edge[i].to;
        if(v==Fa||v==son[u])continue;
        dfs2(v,u,v);
    }
}

void pushup(int p){
    tree[p].dat=tree[p<<1].dat+tree[p<<1|1].dat;
}

void build(int l,int r,int p){
    tree[p].l=l;tree[p].r=r;
    if(l==r){tree[p].dat=w[rk[l]];return;}
    int mid=(l+r)>>1;
    build(l,mid,p<<1);
    build(mid+1,r,p<<1|1);
    pushup(p);
}

void pushdown(int p){
    if(!tree[p].add)return;
    tree[p<<1].add+=tree[p].add;
    tree[p<<1].add%=P;
    tree[p<<1|1].add+=tree[p].add;
    tree[p<<1|1].add%=P;
    long long k=tree[p].add;
    tree[p<<1].dat+=(tree[p<<1].r-tree[p<<1].l+1)*k;
    tree[p<<1|1].dat+=(tree[p<<1|1].r-tree[p<<1|1].l+1)*k;
    tree[p].add=0;
}

void change(int p,int l,int r,int k){
    if(l<=tree[p].l&&tree[p].r<=r){
        tree[p].dat+=(tree[p].r-tree[p].l+1)*k;
        tree[p].add+=k;
        tree[p].add%=P;
        return;
    }
    pushdown(p);
    int mid=(tree[p].l+tree[p].r)>>1;
    if(l<=mid)change(p<<1,l,r,k);
    if(mid<r)change(p<<1|1,l,r,k);
    pushup(p);
}

long long query(int p,int l,int r){
    if(l<=tree[p].l&&tree[p].r<=r)return tree[p].dat;
    pushdown(p);
    int mid=(tree[p].l+tree[p].r)>>1;long long ans=0;
    if(l<=mid)ans+=query(p<<1,l,r);
    if(mid<r)ans+=query(p<<1|1,l,r);
    return ans;
}

void addTree(int u,int v,int w){
    while(top[u]!=top[v]){
        if(dep[top[u]]<dep[top[v]])swap(u,v);
        change(1,dfn[top[u]],dfn[u],w);
        u=fa[top[u]];
    }
    if(dep[u]>dep[v])swap(u,v);
    change(1,dfn[u],dfn[v],w);
}

long long queryTree(int u,int v){
    long long ans=0;
    while(top[u]!=top[v]){
        if(dep[top[u]]<dep[top[v]])swap(u,v);
        ans+=query(1,dfn[top[u]],dfn[u]);
        u=fa[top[u]];
    }
    if(dep[u]>dep[v])swap(u,v);
    ans+=query(1,dfn[u],dfn[v]);
    return ans%P;
}

int main(){
    memset(head,-1,sizeof(head));
    read(N),read(M),read(R),read(P);
    for(int i=1;i<=N;++i)read(w[i]);
    for(int i=1;i<N;++i){
        int u,v;read(u),read(v);
        edge(u,v);edge(v,u);
    }
    dfs1(R,0);dfs2(R,0,R);
    build(1,N,1);
    while(M--){
        int op,x,y,z;read(op);
        if(op==1){
            read(x),read(y),read(z);
            addTree(x,y,z);
        }
        else{
            read(x),read(y);
            printf("%lld\n",queryTree(x,y));
        }
    }
    return 0;
}

2023-06-03T20:57:32 点赞:0