首页 > 其他分享 >G. Vlad and Trouble at MIT

G. Vlad and Trouble at MIT

时间:2024-02-20 14:37:00浏览次数:28  
标签:Vlad sit ll else 100005 next Trouble now MIT

原题链接

题解

细节很多的树形dp,请看代码

code

#define ll long long
#include<bits/stdc++.h>
using namespace std;
ll sit[100005]={0};
ll f[100005]={0};
vector<ll> G[100005];
char str[100005];

inline void read(ll &x) {
    x = 0;
    ll flag = 1;
    char c = getchar();
    while(c < '0' || c > '9'){
        if(c == '-')flag = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9') {
        x = (x << 3) + (x << 1) + (c ^ 48);
        c = getchar();
    }
    x *= flag;
}

inline void write(ll x)
{
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}

void ss(ll now)
{

    ll p=0,s=0,c=0;
    f[now]=0;
    for(auto next:G[now])
    {
        ss(next);
        if(sit[next]==1) p++;
        else if(sit[next]==0) c++;
        else s++;
        f[now]+=f[next];
    }

    //以下为核心部分
    if(str[now]=='P')
    {
        sit[now]=1;
        f[now]+=s;
    }
    else if(str[now]=='S')
    {
        sit[now]=-1;
        f[now]+=p;
    }
    else
    {
        if(!s&&!p) sit[now]=0;//如果子节点只有C不需要造墙
        else
        {
            if(s>p)
            {
                sit[now]=-1;
                f[now]+=p;
            }
            else if(p>s)
            {
                sit[now]=1;
                f[now]+=s;
            }
            else
            {
                //头节点为C,我给p建墙;头节点为s,我给p建墙,头节点为p,我给s建墙。最后浓缩成下面这个式子
                sit[now]=0;
                f[now]+=s;
            }
        }
    }
}

int main()
{
    ll t;
    read(t);
    while(t--)
    {
        ll n;
        read(n);
        for(ll i=2;i<=n;i++)
        {
            ll x;
            read(x);
            G[x].push_back(i);
        }

        scanf("%s",str+1);
        ss(1);

        write(f[1]);
        putchar('\n');

        for(ll i=1;i<=n;i++)G[i].clear();
        memset(sit,0,sizeof sit);
    }
    return 0;
}

标签:Vlad,sit,ll,else,100005,next,Trouble,now,MIT
From: https://www.cnblogs.com/pure4knowledge/p/18022997

相关文章

  • [GIT] GIT Commit Message 规范
    1概述本文主要用于总结自己的一套GitCommitMessage。1.1GitCommitMessage是什么?每次基于Git提交代码,都要写Commitmessage(提交说明),否则就不允许提交。$gitcommit-m"helloworld"-m参数:指定commitmesage1.2规范的提出背景软件工程团队多人协作时,c......
  • Git操作 :从一个分支cherry-pick多个commit到其他分支
    在branch1开发,进行多个提交,这是切换到branch2,想把之前branch1分支提交的commit都【复制】过来,怎么办?首先切换到branch1分支,然后查看提交历史记录,也可以用sourceTree查看,也可以用命令gitlog例如我的gitlog如下:commit1xxx_id1commit2xxx_id2commit3xxx_id3我想把comm......
  • 记一次centos7.9崩溃恢复操作(limits.conf配置失误),救援模式
    引起故障的原因:调整了操作系统的内核参数文件limits.conf,* softnproc131072* hardnproc131072* softnofile65536* hardnofile131072 以上的参数都扩大了10倍,ssh登录主机就开始异常了,连上去后就直接断开了,表象就是无法新建ssh会话连接,当前的用户有sudo免密操......
  • MAC DOCKER Zookeeper 启动报错 mkdir /host_mnt/private/var/db/timezone/tz: operat
    在Mac电脑上启动Zookeeper和kafka的docker容器时报错一开始我的语句是这样的dockerpullwurstmeister/zookeeperdockerrun-d--restart=always--log-driverjson-file--log-optmax-size=100m--log-optmax-file=2--namezookeeper-p2181:2181-v/etc/localtime:/et......
  • [MIT 6.S081] Lab: locks
    Lab:locks在本次实验中依然是承接上次的实验,继续多线程编程的实践。Memoryallocator在该任务中,要为每个CPU实现单独的内存空闲队列分配,在该分配方式下,若单个CPU的空闲队列内存不够,则需要从其他CPU拿走一些空闲内存。转到kernel/kalloc.c,我们首先为“每个CPU的空闲......
  • 在k8S中,Requests和Limits如何影响Pod的调度?
    在Kubernetes(k8S)中,requests和limits是在Pod或容器级别定义的资源限制。它们对Pod的调度和运行时行为有显著影响:Requests(请求):在Pod规范中通过resources.requests设置每个容器需要保证的基本资源量。当Kubernetes调度器为新创建的Pod选择节点时,会确保目标......
  • vue $emit事件用法
    App.vue<template> <ConpentA @paEvent="clickData"/> {{mes}}</template><script>importConpentAfrom'./components/ConpentA.vue';exportdefault{ data(){  return{   mes:''  } },......
  • [MIT 6.S081] Lab7: Multithreading
    Lab7:Multithreading在这个实验中主要是要熟悉一下多线程的一些东西,比如实现一个用户态线程,还有使用一些api。Uthread:switchingbetweenthreads这个任务的主要目的是实现用户态线程的调度,不过这个用户态线程个人认为是有栈协程。在这个任务中,需要实现在一个CPU资源的情......
  • MIT 6.1810 Lab: Multithreading
    lab网址:https://pdos.csail.mit.edu/6.828/2022/labs/cow.htmlxv6Book:https://pdos.csail.mit.edu/6.828/2022/xv6/book-riscv-rev3.pdfschedule代码分析scheduler在内核初始化的最后调用,内核初始化由main函数承担,运行在特权模式,main函数由start函数调用,start函数运行在机器模......
  • [MIT 6.S081] Lab: Copy-on-Write Fork for xv6
    Lab:Copy-on-WriteForkforxv6在这个实验中,我们要为xv6实现cowfork。Implementcopy-onwrite根据写时复制的方式,我们在复制页面的时候应该采用的是将父级的物理页面映射到子级的页面,因此我们需要修改kernel/vm.c中的uvmcopy,将页面复制修改为映射的方式,同时应当将......