【容斥+状压+树上异或】ABC152 F - Tree and Constraints

news2024/11/24 2:20:24

思路真的和他很像,但是我不太会写容斥,只写过几道板子题

而且有个地方不知道怎么处理,就是容斥原理的F函数里面怎么求多个路径的边的并集

这里是用状压处理的

该学学容斥的写法了QwQ


F - Tree and Constraints (atcoder.jp)

题意:

给定一棵树,可以给每一条边都染成黑色或白色,给定Q个要求,每个要求都包含两个数u和v,表示u和v这条路径中至少需要一条边被染成黑色,要同时满足这Q个要求,问染色方案数

 思路:

一开始的想法是这样的:

 

对于计算多条路径的边集的并集,本来想着用Floyd和Lca处理,结果发现好像不太行

对于容斥,我们计算的是所有情况-不合法的情况的并集

即2^(N-1)-Q1-Q2-....+Q12+Q13+....

 所以我们面临两个问题:

如何计算一条路径中的边权和,这个可以Floyd(当然也可以不用)

如何计算多条路径的边集的并集

这里用状压处理

先dfs预处理出树上结点前缀异或和

然后u和v的路径中的边集就是pre[u]^pre[v]

其实是点集,但是也可以看成边集,数量是一样的

所以F函数里面就可以计算一个选的状态的贡献了

直接或起来,然后或起来的结果的1的个数就是边集的并集大小

该状态对应的组合数就是(1ll<<(N-1-__builtin_popcountll(sum)))

如果该状态个数是奇数就需要*-1ll

累加即可

Code:

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=1e2+10;
const int mxe=1e2+10;

struct ty{
    int to,next;
}edge[mxe<<2];

int N,M,u,v,x,y,tot=0;
int head[mxn],pre[mxn],st[mxn];

void add(int u,int v){
    edge[tot].to=v;
    edge[tot].next=head[u];
    head[u]=tot++;
}
void G_init(){
    tot=0;
    for(int i=0;i<=N;i++){
        head[i]=-1;
    }
}
void dfs(int u,int fa){
    for(int i=head[u];~i;i=edge[i].next){
        if(edge[i].to==fa) continue;
        pre[edge[i].to]=pre[u]|(1ll<<(edge[i].to-1));
        dfs(edge[i].to,u);
    }
}
int F(int x){
    int cnt=__builtin_popcountll(x);
    int sum=0,res=0;
    for(int j=0;j<M;j++){
        if((x>>j)&1) sum|=st[j];
    }
    res=(1ll<<(N-1-__builtin_popcountll(sum)));
    if(cnt&1) res*=(-1ll);
    return res;
}
void solve(){
    cin>>N;
    G_init();
    for(int i=1;i<=N-1;i++){
        cin>>u>>v;
        add(u,v);
        add(v,u);
    }
    dfs(1,-1);
    cin>>M;
    for(int i=0;i<M;i++){
        cin>>x>>y;
        st[i]=pre[x]^pre[y];
    }
    int ans=0;
    for(int x=0;x<(1<<M);x++) ans+=F(x);
    cout<<ans<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    while(__--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 实验六 函数的设计

1.编写两个函数分别按单利和复利计算利息&#xff0c;根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1000元在银行存3年&#xff0c;在年利率是6%的情况下&#xff0c;单利和复利分别获得的本息和和利息。单利计算指只有本金计算利息。复利计算是指不仅本金计…

【问题解决】Mybatis Plus Generator(新代码生成器)+达梦数据库,创建数据库连接失败

前言 使用Mybatis Plus Generator&#xff08;新代码生成器&#xff09;达梦数据库&#xff0c;执行生成方法失败 无法创建数据库连接 文章目录 前言问题描述错误日志输出尝试解决最终解决方法 问题描述 创建数据源配置&#xff0c;连接配置参照官网 jdbc:dm://localhost:5236/…

电脑照片怎么导入苹果手机?三个妙招帮你解决!

案例&#xff1a;电脑有很多照片&#xff0c;该如何导入苹果手机&#xff1f; 【家人们&#xff0c;电脑里面的照片怎么样可以快速导入到苹果手机&#xff1f;求方法&#xff01;】 导入电脑照片到苹果手机是一个常见的需求&#xff0c;尤其是当您希望在手机上随时欣赏和分享这…

从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

.NET多平台应用程序UI&#xff08;. NET MAUI&#xff09;的市场吸引力与日俱增&#xff0c;这是微软最新的开发平台&#xff0c;允许开发者使用单个代码库创建跨平台应用程序。尽管很多WPF开发人员还没有跟上 .NET MAUI的潮流&#xff0c;但我们将在这篇文章中为大家展示他的潜…

数字信号处理基础(一)

目录 1. 写在前面2. 连续信号和离散信号2.1连续信号2.2 离散信号 3. 常用信号的产生3.1 单位脉冲序列3.2 单位阶跃序列3.3 指数函数3.4 正弦信号和余弦信号3.5 sinc函数3.6 矩形脉冲信号 4. 信号卷积5. 完整代码 1. 写在前面 为了更好的理解通信原理系列文章&#xff0c;在此补…

说说什么是IO多路复用?以及其演进过程。

文章目录 1.阻塞IO模型&#xff08;BIO&#xff09;和 非塞IO模型&#xff08;NIO&#xff09;2.什么是IO多路复用&#xff1f;3.IO多路复用的演进&#xff1f; 1.阻塞IO模型&#xff08;BIO&#xff09;和 非塞IO模型&#xff08;NIO&#xff09; 阻塞IO模型&#xff08;BIO&…

国考省考行测:科学推理,光学,声学

国考省考行测&#xff1a; 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测&#xff0c;所以大家认真准备吧&#xff0c;我讲一起屡屡申论和行测的重要知识点 遇到寒冬&am…

响应式UI组件库Kendo UI for Vue可轻松创建联系表单!

Kendo UI致力于新的开发&#xff0c;来满足不断变化的需求。Kendo UI for Vue使用旨在提高性能和丰富用户体验的Vue组件&#xff0c;帮助开发人员构建下一代应用程序。它是为Vue技术框架提供可用的Kendo UI组件&#xff0c;以便更快地构建更好的Vue应用程序。 联系表单用于在网…

CRM系统的实施要注意什么?

CRM系统的实施要注意什么&#xff1f; 在如今竞争激烈的商业环境中&#xff0c;拥有一个高效的CRM系统已经变成了企业不可或缺的一部分。 这就来讲一讲&#xff0c;在实施CRM过程中需要注意哪些问题。 01 CRM实施要注意哪些问题&#xff1f; 企业在实施CRM时&#xff0c;需…

虹科案例 | 激光测距仪在高温金属冶炼中的应用

Part.01 应用背景 虹科Dimetix激光测距传感器通常用于钢制热轧机&#xff0c;因为它们提供了一种精确的非接触式方法来确定温度过高而无法触摸的材料的位置或尺寸。苛刻的生产工艺和恶劣的环境条件通常超出了依赖于与被测材料接触的传统传感器的能力。虹科Dimetix激光器拥有良…

博客系统后端设计(五) -实现登录页面要求强制登录功能

文章目录 实现页面要求强制登录实现思路1.约定前后端交互接口2.实现后端代码3.修改前端代码 实现页面要求强制登录 当用户访问列表页/详情页/编辑页的时候&#xff0c;要求用户已经是登录的状态了&#xff0c; 如果用户还没登录&#xff0c;就会强制跳转到登录页面。 实现思路…

精通SpringCloud/Boot配置文件在Nacos中的配置

目录 1 什么是nacos? Nacos 地图 Nacos 生态图 2 springcloud中精通Nacos的配置中心 目录结构 日志配置文件 原始的配置文件 使用Nocas对配置文件进行拆分 引用nacos中的配置文件 共享nacos中的配置文件操作 我们使用同样的方法将日志配置提取出来 1 什么是nacos?…

微信过期视频怎么恢复?恢复视频的方法已经给你总结好了!

案例&#xff1a;微信视频过期&#xff0c;已经被清理怎么办&#xff1f; 【朋友之前发的视频过期了&#xff0c;现在怎么都找不到&#xff0c;有什么方法可以恢复回来吗&#xff1f;感谢&#xff01;】 微信作为一款热门的社交应用程序&#xff0c;允许用户发送和接收照片、视…

搭建Freekan私人影视电影网站,cpolar内网穿透发布上线

文章目录 1.前言2.本地网页搭建2.1 环境使用2.2 支持组件和环境设置2.3 支持组件选和环境设置2.4 网页安装2.5 测试和使用2.6 问题解决 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDNprobezy的文章&#xff1a;使用Cpolarfreekan源码…

MATLAB绘制动画(五)GIF

GIF这个文件大家就比较熟悉了&#xff0c;我们通常当做表情包的动图一般都是用GIF格式。 这是因为GIF格式的文件比较小&#xff0c;传输速度快。 用MATLAB生成GIF图像同样需要将图像保存下来&#xff0c;通过循环展示动画 代码如下&#xff1a; clc; clear; close all; set…

SpringCloud(27. Redis 和 ZK 分布式锁)

上一篇 &#xff1a;26.分布式服务框架Dubbo面试题简析 1. redis 分布式锁 官方叫做 RedLock 算法&#xff0c;是 redis 官方支持的分布式锁算法。这个分布式锁有 3 个重要的考量点&#xff1a; 互斥&#xff08;只能有一个客户端获取锁&#xff09;不能死锁容错&#xff08;…

关于SD webui 部署运行的一些坑

[Bug 1]: RuntimeError: Couldnt install gfpgan 可以先尝试&#xff1a; pip install gfpgan 不过是在虚拟环境venv下的 E:\stable-diffusion-webui\venv\Scripts\python.exe -m pip install gfpgan 如果还是无法安装gfpgan的原因是网络问题&#xff0c;就算已经科学上网…

maven 项目依赖加载不出来

1.依赖加载不出来&#xff0c;查看pom.xml放的位置是否对了 2.1下载mvn到本地&#xff0c;进行解压 2.2新建系统变量MAVEN_HOME&#xff0c;值直接指向安装目录D:\apache-maven-3.9.2 2.3path变量中增加&#xff1a;%MAVEN_HOME%\bin 2.4若仓库位置不在C盘用户下&#xff0…

SpringMVC对请求的处理流程

1.用户发起some.do请求 2.DispatcherServlet中央调度器接收请求some.do&#xff0c;把请求转交给处理器映射器  处理器映射器:SpringMVC框架中的一种对象&#xff0c;框架实现了HandlerMapping接口的类都叫映射器&#xff08;多个&#xff09; 处理器映射器的作用:根据请求&a…

Ajax加强(xhr、XML、JSON、xhr上传文件)

文章目录 一、XMLHttpRequest的基本使用1、 使用xhr发起GET请求2、了解xhr对象的readyState属性3、使用xhr发起带参数的GET请求4、查询字符串5、URL编码与解码6、使用xhr发起POST请求 二、数据交换格式1、XML&#xff08;1&#xff09;XML和HTML的区别&#xff08;2&#xff09…