#include<bits/stdc++.h>
using namespace std;
const int mod =1e9+7;
int dp[1<<10];
int cnt[1<<10];
int ans[1<<10];
char c[10];
int t;
void add(int &x,int y)
{
    x=x+y>=mod?x+y-mod:x+y;
}
void del(int &x,int y)
{
    x=x-y<0?x-y+mod:x-y;
}
int main()
{
    int times;
    scanf("%d",&times);
    while(times--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        t=1<<n;
        int u,v;
        for(int i=0;i<t;i++)
        {
            dp[i]=0;
            cnt[i] = __builtin_popcount(i);//已经加入的边,函数返回i中位为1的个数
        }
        dp[0]=1;
        for(int k=1;k<=m;k++)
        {
            memset(ans,0,sizeof(ans));
            scanf("%s%d%d",c,&u,&v);
            u--;
            v--;
            int s=(1<<u)|(1<<v);//表示u和v两条边已被选
            if(c[0]=='+')
            {
                for(int i=t-1;i>=0;i--)//从后往前遍历表示在没有u和v两条边的集合里添加这两条边
                {
                    if(!(i&s))
                        add(dp[i^s],dp[i]);
                }
            }
            else
            {
                for(int i=0;i<t;i++)//从前往后便利表示在含有u和v两条边的集合里删除后者通过增加u和v两条边而达成前者的状态
                {
                    if(!(i&s))
                        del(dp[i^s],dp[i]);
                }
            }
            for(int i=1;i<t;i++)
        {
            add(ans[cnt[i]],dp[i]);//将含有这么多条边的状态合并计数
        }
        for(int i=2;i<=n;i+=2)
            printf("%d%c",ans[i],i==n?'\n':' ');
        }
    }
    return 0;
}

/*状态压缩用于将数据转化为二进制用0和1表示状态,通常数据在十几组左右,就也就是可以用2的十几次方来代替状态,通常涉及与或异或等操作,同时大胆猜测推断dp公式,看到数据要对其敏感,朝着正确的方向去考虑。*/

2018杭电多校第三场1003(状态压缩DP)的更多相关文章

  1. 2018 Multi-University Training Contest 3 杭电多校第三场

    躺了几天 终于记得来填坑了 1001 Ascending Rating   (hdoj 6319) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6319 ...

  2. 2019年杭电多校第三场 1011题Squrirrel(HDU6613+树DP)

    题目链接 传送门 题意 给你一棵无根树,要你寻找一个根节点使得在将一条边权变为\(0\)后,离树根最远的点到根节点的距离最小. 思路 本题和求树的直径很像,不过要记得的东西有点多,且状态也很多. \( ...

  3. 杭电多校第三场 A Ascending Rating

    Problem Description Before the start of contest, there are n ICPC contestants waiting in a long queu ...

  4. 2018杭电多校第六场1009(DFS,思维)

    #include<bits/stdc++.h>using namespace std;int a[100010];char s[20];int zhiren[100010];vector& ...

  5. 2018杭电多校第五场1002(暴力DFS【数位】,剪枝)

    //never use translation#include<bits/stdc++.h>using namespace std;int k;char a[20];//储存每个数的数值i ...

  6. 2019年杭电多校第三场 1008题Game(HDU6610+带修改莫队+Nim博弈)

    题目链接 传送门 题意 给你\(n\)堆石子,每堆有\(a_i\)堆石子,\(q\)次操作: 在\([L,R]\)内有多少个子区间使得\(Alice\)(先手)在\(Nim\)博弈中获胜: 交换\(a ...

  7. [2019杭电多校第三场][hdu6609]Find the answer(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6609 大致题意是求出每个位置i最小需要将几个位置j变为0(j<i),使得$\sum_{j=1}^ ...

  8. [2019杭电多校第三场][hdu6608]Fansblog

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6608 大致题意是比p小的最大素数q,求q!%p的值. 由威尔逊定理开始推: $(p-1)!\equiv ...

  9. [2019杭电多校第三场][hdu6606]Distribution of books(线段树&&dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6606 题意为在n个数中选m(自选)个数,然后把m个数分成k块,使得每块数字之和最大的最小. 求数字和最 ...

随机推荐

  1. 【zabbix】自动注册,实现自动发现agent并添加监控(agent不需要任何配置)

    更新: 后来在实际使用中发现,与其使用zabbix自动注册,不如直接调用zabbix的api主动发起添加服务器的请求,这样就不需要在zabbixserver上配置host信息了.实现全自动.具体调用方 ...

  2. c# &与&& 和 |与||的区别(转载)

    &:按位与,对两个条件都进行判断&&:逻辑与,只要一个条件满足,另外一个条件就不会执行 同理:|:按位或,对两个条件都进行判断||:逻辑或,只要一个条件满足,另外一个条件就不会 ...

  3. web 全栈 学习 2 一个好的页面是如何炼成的

    第一章:Web页面内容的构成2.Web内容的分工一个Web页面可能的构成(视觉上看):①文字.链接.标题②交互入口(表单元素)③图片(哪些类型)④动画 Flash动画 HTML5 CSS3 动画⑤音视 ...

  4. dojo 官方翻译 dojo/_base/lang 版本1.10

    官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#dojo-base-lang 应用加载声明: require ...

  5. Mysql远程登陆错误:ERROR 2003

    不能远程登陆Mysql,错误:ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.114' (10060).原因是电脑防火墙 ...

  6. 高并发压力下导致数据库bug

    环境信息:  linux 6.1 + oracle11.2.0.3 RAC     问题现象: 学校晚上6点选课,人数大概有3000,7点时,数据库报错如下(数据库到6点多还是可以连接的),数据库hu ...

  7. C# winform控件之PictureBox详解

    PictureBox表示用于显示图像的 Windows 图片框控件https://msdn.microsoft.com/zh-cn/library/system.windows.forms.pictu ...

  8. hls协议(最清晰的讲解)

    今天来介绍一下HLS协议,这个协议是由苹果公司提出并推广开来的.来一段维基百科的定义. HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议.是 ...

  9. Visual Studio 2012 与此版本的 Windows 不兼容 解决

    警告: [Window Title] 程序兼容性助手[Main Instruction] 此程序存在已知的兼容性问题[Expanded Information] Visual Studio 2012 ...

  10. 【LeetCode】062. Unique Paths

    题目: A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...