传送门

Description

Solution

容斥,考虑有多少个节点不被匹配到,求出的方案,多个点可以同时不被匹配到

状态压缩+树形dp

Code 

#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)>(b)?(b):(a))
#define reg register
#define int ll
inline int read()
{
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<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
int n,m;
struct edge{int to,nex;}e[540];int en,hr[20],Hr[20];
void ins(int x,int y,int *h)
{
e[++en]=(edge){y,h[x]};h[x]=en;
e[++en]=(edge){x,h[y]};h[y]=en;
}
int Siz[1<<17],now,ans,f[20][20],g[20];
void dfs(int x,int fa)
{
reg int i,j; for(i=0;i<n;++i)
{
if(now>>i&1)f[x][i]=1;
else f[x][i]=0;
} for(i=hr[x];i;i=e[i].nex)if(fa^e[i].to)dfs(e[i].to,x);
memset(g,0,sizeof(int[n]));
if(~fa)for(i=0;i<n;++i)if(now>>i&1)for(j=Hr[i];j;j=e[j].nex)if((now>>e[j].to)&1)g[e[j].to]+=f[x][i];
for(i=0;i<n;++i)f[fa][i]*=g[i];
}
signed main()
{
n=read();m=read();
reg int i,x,y;
for(i=1;i<=m;++i)
{
x=read()-1;y=read()-1;
ins(x,y,Hr);
}
for(i=1;i<n;++i) x=read()-1,y=read()-1,ins(x,y,hr);
int S=1<<n;
for(x=1;x<S;++x)
{
Siz[x]=Siz[(x-1)&x]+1;now=x;dfs(0,-1);
for(i=0;i<n;++i)if(x>>i&1)ans+=((n-Siz[x])&1?-1:1)*f[0][i];
}
printf("%lld\n",ans);
return 0;
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

「ZJOI2016」小星星的更多相关文章

  1. 「LOJ2091」「ZJOI2016」小星星 容斥+DP

    题目描述 小 Y 是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用 \(m\)条彩色的细线串了起来,每条细线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉 ...

  2. @loj - 2091@ 「ZJOI2016」小星星

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 Y 是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有 ...

  3. loj2091 「ZJOI2016」小星星

    ref 总的来说,就是 容斥转化为点对应到点集问题. 树形 dp 解决转化后的问题. #include <iostream> #include <cstring> #inclu ...

  4. 「ZJOI2016」解题报告

    「ZJOI2016」解题报告 我大浙的省选题真是超级神仙--这套已经算是比较可做的了. 「ZJOI2016」旅行者 神仙分治题. 对于一个矩形,每次我们从最长边切开,最短边不会超过 \(\sqrt{n ...

  5. 「ZJOI2016」大森林 解题报告

    「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...

  6. 「ZJOI2016」旅行者 解题报告

    「ZJOI2016」旅行者 对网格图进行分治. 每次从中间选一列,然后枚举每个这一列的格子作为起点跑最短路,进入子矩形时把询问划分一下,有点类似整体二分 至于复杂度么,我不会阿 Code: #incl ...

  7. 2090. 「ZJOI2016」旅行者 分治,最短路

    2090. 「ZJOI2016」旅行者 链接 loj 思路 \((l,mid)(mid+1,r)\).考虑跨过mid的贡献. 假设选的中间那条线的点为gzy,贡献为\(dis(x,gzy)+dis(g ...

  8. 【LOJ】#2090. 「ZJOI2016」旅行者

    题解 每次按较长边把矩形分成两半,找一个中间轴,轴上的每个点跑一边最短路更新所有的答案 然后把矩形分成两半,递归下去 代码 #include <bits/stdc++.h> #define ...

  9. loj2092 「ZJOI2016」大森林

    ref不是太懂-- #include <algorithm> #include <iostream> #include <cstring> #include < ...

随机推荐

  1. Mars Sample 使用说明

    Mars Sample 使用说明  https://github.com/Tencent/mars/wiki/Mars-sample-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98 ...

  2. CSP J/S 2019受虐记

    一枚蒟蒻的游记~ 提高组DAY1 不是说每场考试都有一道签到题吗 那我tm读了三遍题硬是没找到一道水题是怎么回事(是我太弱了吗) 没办法,硬着头皮做T1 暴力写法...期望得分30pts 于是...在 ...

  3. scrapy 爬虫中间件 httperror中间件

    源码 class HttpErrorMiddleware(object): @classmethod def from_crawler(cls, crawler): return cls(crawle ...

  4. day 26作业

    作业 1.整理TCP三次握手.四次挥手图 三次握手 起初A和B都处于CLOSED状态--B创建TCB,处于LISTEN状态,等待A请求--A创建TCB,发送连接请求(SYN=1,seq=x),进入SY ...

  5. The Instruction Set In Cortex-M3

    The Cortex-M3 supports the Thumb-2 instruction set. This is one of the most important features of th ...

  6. Everything 配置问题导致信息泄露复现

    0x00 简介 Everything是一个私有的免费Windows桌面搜索引擎,可以在NTFS卷上快速地根据名称查找文件和目录. "Everything" 是 Windows 上一 ...

  7. beta版本——第七次冲刺

    第七次冲刺 (1)SCRUM部分☁️ 成员描述: 姓名 李星晨 完成了哪个任务 编写个人信息修改界面的js 花了多少时间 3h 还剩余多少时间 0h 遇到什么困难 密码验证部分出现问题 这两天解决的进 ...

  8. spriingboot使用thymeleaf

    1 添加jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  9. jquery对象转成dom对象

     jQuery库本质上还是JavaScript代码,它只是对JavaScript语言进行包装处理,为的是提供更好更方便快捷的DOM处理与开发中经常使用的功能.我们使用jQuery的同时也能混合Java ...

  10. Git的工作流程

    git的工作流程为: 克隆Git资源作为工作目录 在克隆的资源上添加或者修改文件 如果别人修改了,你可以更新资源 在提交前查看修改 提交修改 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交 ...