(分别用$E_{T}$和$E_{G}$表示树和图的边集)

简单分析,可以发现题目即求排列$p_{i}$的数量,满足$\forall (x,y)\in E_{T},(p_{x},p_{y})\in E_{G}$(记为条件$A$)

定义$count(S)$为:序列$p_{i}$的数量(忽略排列的限制),满足条件$A$且$\forall 1\le i\le n,p_{i}\in S$

事实上,我们的答案即求$\sum_{S\subseteq [1,n]}(-1)^{n-|S|}f(S)$

证明可以考虑每一个满足条件$A$序列$p_{i}$的对答案的贡献:

1.若$p_{i}$是排列,显然仅有$S=[1,n]$时有贡献,且恰好为1

2.若$p_{i}$不为排列,令$T=\{a_{i}\}$其贡献即$\sum_{T\subseteq S\subseteq [1,n]}(-1)^{n-|S|}$,由于其不为排列,存在$1\le x\le n$且$x\notin T$,任取其中的一个$x$,考虑$x$是否存在不难发现两者恰好抵消,即贡献为0

综上,即仅有排列对答案有1的贡献,即得证

不妨暴力枚举$S$,考虑如何求$f(S)$:对树进行dp,用$f_{i,j}$表示以$i$为根的子树内且$p_{i}=j$的方案数,枚举儿子的值转移即可,复杂度为$o(n^{3})$

最终复杂度即$o(n^{3}2^{n})$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 20
4 #define ll long long
5 struct Edge{
6 int nex,to;
7 }edge[N<<1];
8 int E,n,m,x,y,head[N],vis[N][N];
9 ll ans,f[N][N];
10 void add(int x,int y){
11 edge[E].nex=head[x];
12 edge[E].to=y;
13 head[x]=E++;
14 }
15 void dfs(int k,int fa,int S){
16 for(int i=0;i<n;i++)
17 if (S&(1<<i))f[k][i]=1;
18 else f[k][i]=0;
19 for(int i=head[k];i!=-1;i=edge[i].nex)
20 if (edge[i].to!=fa){
21 dfs(edge[i].to,k,S);
22 for(int j=0;j<n;j++)
23 if (S&(1<<j)){
24 ll s=0;
25 for(int t=0;t<n;t++)
26 if (vis[j][t])s+=f[edge[i].to][t];
27 f[k][j]*=s;
28 }
29 }
30 }
31 int main(){
32 scanf("%d%d",&n,&m);
33 memset(head,-1,sizeof(head));
34 for(int i=1;i<=m;i++){
35 scanf("%d%d",&x,&y);
36 x--,y--;
37 vis[x][y]=vis[y][x]=1;
38 }
39 for(int i=1;i<n;i++){
40 scanf("%d%d",&x,&y);
41 x--,y--;
42 add(x,y);
43 add(y,x);
44 }
45 for(int i=0;i<(1<<n);i++){
46 dfs(0,0,i);
47 ll s=0;
48 for(int j=0;j<n;j++)s+=f[0][j];
49 for(int j=0;j<n;j++)
50 if (i&(1<<j))s*=-1;
51 ans+=s;
52 }
53 if (n&1)ans*=-1;
54 printf("%lld",ans);
55 }

[loj2091]小星星的更多相关文章

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

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

  2. loj2091 「ZJOI2016」小星星

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

  3. bzoj4455 & loj2091 [Zjoi2016]小星星 容斥原理+树形DP(+状压DP?)

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4455 https://loj.ac/problem/2091 题解 很不错的一道题.(不过在当 ...

  4. BZOJ4455: [Zjoi2016]小星星

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

  5. JS对象实现随机满天小星星实例

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 【BZOJ-4455】小星星 容斥 + 树形DP

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 204  Solved: 137[Submit][Status] ...

  7. 小星星的php

    大家好,我是小星星,最近新学的php,我迫不及待要跟大家分享了!!come on!一起来看小星星的世界 先为大家介绍php基础 首先我们来看看什么叫php: PHP(外文名:PHP: Hypertex ...

  8. BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]

    4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...

  9. [ZJOI2016]小星星

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

随机推荐

  1. linux启动redis命令

    首先进入到/usr/local/bin目录下(因为你redis安装的目录绝大多数都在这里) root@xxxx:/usr/local/bin#:redis-server wangconfig/redi ...

  2. 创建HTML文档

    目录 创建HTML文档 构筑基本的文档结构 DOCTYPE元素 DOCTYPE元素 代码清单1 使用DOCTYPE元素 html元素 html元素 代码清单2 使用html元素 head元素 head ...

  3. HTML5元素背景知识

    目录 HTML5元素背景知识 语义与呈现分离 元素选用原则 少亦可为多 别误用元素 具体为佳,一以贯之 对用户不要想当然 元素说明体例 ol元素 元素速览 文档和元数据元素 文档和元数据元素 文本元素 ...

  4. NX开发 刀路生成

    此段是可以生成程序的完整代码,只有从坐标(10,10,10)到(500,500,500)一根刀轨.motion_ptr->feed_value 的值为0时生成G00,非0时生成G01.此代码只有 ...

  5. SharkCTF2021 Babyhttp && get_or_lose

    两道web. Babyhttp: 直接dirsearch,发现同时存在git和bak泄露:经验证,git的没用. 访问index.php.bak, 下载源码: 抓包,改包,发包即可. get_or_l ...

  6. 【UE4】GAMES101 图形学作业1:mvp 模型、视图、投影变换

    总览 到目前为止,我们已经学习了如何使用矩阵变换来排列二维或三维空间中的对象.所以现在是时候通过实现一些简单的变换矩阵来获得一些实际经验了.在接下来的三次作业中,我们将要求你去模拟一个基于CPU 的光 ...

  7. Scrum Meeting 13

    第13次例会报告 日期:2021年06月05日 会议主要内容概述: 团队成员均明确了下一步的目标,进度突飞猛进辣 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wiki,如下 ...

  8. 【SDOI2014】数数(补)

    见 AC自动机(补坑了) [SDOI2014] 数数 简要题意:  我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为子串.例如当S={22,333,0233}时 ...

  9. 链表中环的入口结点 牛客网 剑指Offer

    链表中环的入口结点 牛客网 剑指Offer 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. # class ListNode: # def __init__(se ...

  10. songwenxin

    # -*- coding: utf-8 -*- import wx from modelmngr_frame import MyFrame1 ############################# ...