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

CF1926G Vlad and Trouble at MIT

时间:2024-09-08 10:14:01浏览次数:10  
标签:Vlad min int cas 1e9 Trouble CF1926G MIT dp

题意

有一棵树,树上每个节点有\(C\) , \(S\) , \(P\) 三种,现在可以选择一些边断掉,使得每个连通块内没有同时出现 \(S\) , \(P\) 的情况,问最少断多少条

思路

板子树形 \(DP\)

考虑 \(dp_{i,0/1,0/1}\) 表示以 \(i\) 为子树,是否有跟 \(i\) 联通的 \(S\) 和 \(P\)

转移

 dp[x][0][0]+=min({dp[i][0][0],dp[i][0][1]+1,dp[i][1][0]+1});
 dp[x][1][0]+=min({dp[i][0][0],dp[i][1][0],dp[i][0][1]+1});
 dp[x][0][1]+=min({dp[i][0][0],dp[i][1][0]+1,dp[i][0][1]});

对每种情况分类讨论即可

需要注意判断 \(i\) 节点是否为 \(S\) , \(P\) , 以免状态不合法,不合法状态设为 \(+ \inf\)

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
vector<int> g[N];
char s[N];
int dp[N][2][2];
void dfs(int x)
{
    for(auto i:g[x])
    {
        dfs(i);
        dp[x][0][0]+=min({dp[i][0][0],dp[i][0][1]+1,dp[i][1][0]+1});
        dp[x][1][0]+=min({dp[i][0][0],dp[i][1][0],dp[i][0][1]+1});
        dp[x][0][1]+=min({dp[i][0][0],dp[i][1][0]+1,dp[i][0][1]});
    }
    if(s[x]=='P') dp[x][0][0]=dp[x][0][1]=1e9;
    if(s[x]=='S') dp[x][0][0]=dp[x][1][0]=1e9;
}
int main()
{
    int cas;
    cin>>cas;
    while(cas--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) dp[i][0][0]=dp[i][1][0]=dp[i][0][1]=0,g[i].clear();
        for(int i=2;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            g[x].push_back(i);
        } 
        scanf("%s",s+1);
        dfs(1);
        cout<<min({dp[1][0][0],dp[1][0][1],dp[1][1][0]})<<"\n";
    }
}

标签:Vlad,min,int,cas,1e9,Trouble,CF1926G,MIT,dp
From: https://www.cnblogs.com/Oistream/p/18402625

相关文章

  • DTC(Diagnostic Trouble Code)
    DTC(诊断故障码)是用于汽车和其他电子设备中的一种代码,旨在指示系统中存在的故障或问题。它是车辆自诊断系统(如OBD-II)生成的,用于帮助技术人员检测和解决故障。###DTC的组成1.**字母部分**:  -**P**:动力传动系统(Powertrain),包括发动机和变速器故障。  -**B**:车身(Body),......
  • 打靶记录13——doubletrouble
    靶机:https://www.vulnhub.com/entry/doubletrouble-1,743/难度:中目标:取得两台靶机root权限涉及攻击方法:主机发现端口扫描Web信息收集开源CMS漏洞利用隐写术密码爆破GTFObins提权SQL盲注脏牛提权学习记录(nc):nc命令用来传文件,在很多时候传大文件的时候往往......
  • 【题解】CF - 823C : Coin Troubles
    原题传送门题目大意有\(N\)种硬币,两种硬币的面值可能相同。给定\(q\)个限制,第\(i\)个限制由\(b_i\)和\(c_i\)组成,表示第\(b_i\)种硬币的数量严格大于第\(c_i\)种硬币的数量,且每个\(b_i\)与\(c_i\)都是唯一的。问在满足所有限制的情况下,有多少种可能的方案,能组......
  • Coin Troubles题解(dp,拓扑序)
    CoinTroubles题解(dp,拓扑序)题目链接:https://codeforces.com/problemset/problem/283/C题意:有\(n\)种硬币,每种硬币都有一个价格\(ai\),现在有\(q\)个限制,每个限制会告诉你\((b,c)\),并要求\(b\)种硬币的数量严格大于\(c\)种硬币的数量。现在问你一共有多少种买硬币的方法,使得最后......
  • HDU 4334 Trouble
    题目链接:HDU4334【Trouble】思路    哈希+贪心,直接将五个数组分成两个或者三个数组,此时数组相加的时间复杂度为O(n2)或者O(n3),然后双重循环数组e和s1并遍历找出s2中是否有满足题意的元素,这个步骤可以使用二分代替还能降低时间复杂度。代码#include<iostream>#inc......
  • LLM troubleshooting for ping lost between containers.
    问题使用dockercompose启动的容器组,容器间不能通信。 LLM问答解决使用docker-compose启动的一组应用,但是容器间网络ping不通,为啥?答当使用docker-compose启动的一组应用出现容器间网络ping不通的情况时,可能的原因和解决方法可以归纳如下:   网络配置错误:       ......
  • 『vulnhub系列』doubletrouble-1
    『vulnhub系列』doubletrouble-1下载地址https://www.vulnhub.com/entry/doubletrouble-1,743/信息搜集使用命令,获得存活靶机IP为138,开启端口22和80nmap192.168.0.*#因为当前NAT模式,攻击机和靶机在一个内网环境中访问80的web服务,是一个登录页面又是qdPm,之前做过一个q......
  • 题解:CF1926G
    题目传送门思路发现权值为C的点可以选择看做是权值为S或为P的点,所以问题转换为怎么给C点赋值可以使答案最小,考虑树形dp。\(f_{i,0/i,1}\)表示\(i\)点赋值为S或P时最少要删除几条边。但如果当前点权值不为C的话,那显然他的父亲节点应该选择和他权值相同的点才......
  • [network][easy case]troubleshoting the connection to a remote server
    background&issueIdeployedaminioserveronanECS(avpsinalibaba),butIcouldn'taccessitonlocalPC.It'saneasycasebutverycommonwhenconnectingtoanewserver.soIrecordmybriefprocedurehereincaseyoucomeintosimi......
  • E. Vlad and a Pair of Numbers
    题解首先,我们知道异或运算是无进位相加,那么a^b=x我们不妨先让a=x,b=0;而a,b其余二进制位上要么同为0,要么同为1。接下来,根据题意a+b=2x,我们可知我们同时为a,b加上x/2。此时再判断a^b是否等于x即可。code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intma......