给出一些点集,然后对于每一次要求给出的这些点集里的1,2,3,4,5,6....n/2的匹配数,

dp[i][j] 表示到第i次操作里点集为j的匹配数,然后我每次加入一条边u-v,我的状态就是

dp[i][j] = dp[i-1][j] + dp[i-1][(不含u,v)的j],删除就是dp[i][j] = dp[i-1][j] - dp[i-1][(不含u,v)的j]

一个匹配就是两个点,所以2*i个点的答案就是匹配为i的答案。

然后可以减去一维,变成一维的dp,然后在取模一下就可以了

  1. #include<map>
  2. #include<set>
  3. #include<ctime>
  4. #include<cmath>
  5. #include<stack>
  6. #include<queue>
  7. #include<string>
  8. #include<vector>
  9. #include<cstdio>
  10. #include<cstdlib>
  11. #include<cstring>
  12. #include<iostream>
  13. #include<algorithm>
  14. #define lowbit(x) (x & (-x))
  15.  
  16. typedef unsigned long long int ull;
  17. typedef long long int ll;
  18. const double pi = 4.0*atan(1.0);
  19. const int inf = 0x3f3f3f3f;
  20. const int maxn = ;
  21. const int maxm = ;
  22. const int mod = 1e9+;
  23. using namespace std;
  24.  
  25. int n, m, tol, T;
  26. int dp[maxn];
  27. int cnt[maxn];
  28. int ans[];
  29.  
  30. void init() {
  31. memset(dp, , sizeof dp);
  32. }
  33.  
  34. int calc(int x) {
  35. int ans = ;
  36. while(x) {
  37. if(x & ) ans++;
  38. x >>= ;
  39. }
  40. return ans;
  41. }
  42.  
  43. void handle() {
  44. for(int i=; i<=(<<); i++) {
  45. cnt[i] = calc(i);
  46. }
  47. }
  48.  
  49. int main() {
  50. handle();
  51. scanf("%d", &T);
  52. while(T--) {
  53. init();
  54. scanf("%d%d", &n, &m);
  55. dp[] = ;
  56. char s[];
  57. while(m--) {
  58. memset(ans, , sizeof ans);
  59. int u, v;
  60. scanf("%s%d%d", s, &u, &v);
  61. u--, v--;
  62. int y = (<<u) + (<<v);
  63. if(s[] == '+') {
  64. for(int i=(<<n)-; i>=; i--) {
  65. if((i&(<<u)) && (i&(<<v))) {
  66. dp[i] += dp[i-y];
  67. dp[i] %= mod;
  68. }
  69. }
  70. } else {
  71. for(int i=; i<(<<n); i++) {
  72. if((i&(<<u)) && (i&(<<v))) {
  73. dp[i] -= dp[i-y];
  74. dp[i] = (dp[i] % mod + mod) % mod;
  75. }
  76. }
  77. }
  78. for(int i=; i<(<<n); i++) {
  79. ans[cnt[i]] += dp[i];
  80. ans[cnt[i]] = (ans[cnt[i]] % mod + mod) % mod;
  81. }
  82. for(int i=; i<=n; i+=) printf("%d%c", ans[i] % mod, i==n ? '\n' : ' ');
  83. }
  84. }
  85. return ;
  86. }

HDU6321 Dynamic Graph Matching (杭电多校3C)的更多相关文章

  1. HDU6321 Dynamic Graph Matching【状压DP 子集枚举】

    HDU6321 Dynamic Graph Matching 题意: 给出\(N\)个点,一开始没有边,然后有\(M\)次操作,每次操作加一条无向边或者删一条已经存在的边,问每次操作后图中恰好匹配\( ...

  2. [HDU6321]Dynamic Graph Matching(DP)

    题意:给定一个n个点的无向图,开始没有边,然后m个操作,每次加边或者删边,每次操作后输出正好k个边的匹配数k=1,2,3,...n/2,n<=10,m<=30000 可以发现,n<= ...

  3. hdu多校第3场C. Dynamic Graph Matching

    Problem C. Dynamic Graph Matching Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Tot ...

  4. HDU 6321 Dynamic Graph Matching

    HDU 6321 Dynamic Graph Matching (状压DP) Problem C. Dynamic Graph Matching Time Limit: 8000/4000 MS (J ...

  5. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

  6. 2018 Multi-University Training Contest 1 杭电多校第一场

    抱着可能杭电的多校1比牛客的多校1更恐怖的想法 看到三道签到题 幸福的都快哭出来了好吗 1001  Maximum Multiple(hdoj 6298) 链接:http://acm.hdu.edu. ...

  7. 2017杭电多校06Rikka with Graph

    Rikka with Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. [2019杭电多校第五场][hdu6629]string matching(扩展kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6629 题意求字符串的每个后缀与原串的最长公共前缀之和. 比赛时搞东搞西的,还搞了个后缀数组...队友一 ...

  9. 2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)

    咕咕咕了太久  多校博客直接从第三场跳到了第九场orz 见谅见谅(会补的!) 明明最后看下来是dp场 但是硬生生被我们做成了组合数专场…… 听说jls把我们用组合数做的题都用dp来了遍 这里只放了用组 ...

随机推荐

  1. Ubuntu端口开放

    一.关于iptable的介绍 维基百科:https://zh.wikipedia.org/wiki/Iptables 注意:iptables的操作需要root权限 二.具体操作 sudo apt-ge ...

  2. spring boot中log4j冲突问题和解决办法

    Spring Boot中自带了log4j日志管理.写法应该是: private static final Logger logger = Logger.getLogger(XXX.class); 而不 ...

  3. [转帖]ipvsadm命令参考及其应用例子

    ipvsadm命令参考及其应用例子 https://blog.csdn.net/orichisonic/article/details/47375227 只是简单创建了 service和添加serve ...

  4. HDU 4913 Least common multiple

    题目:Least common multiple 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4913 题意:有一个集合s,包含x1,x2,...,xn, ...

  5. AngularJS双向数据绑定

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

  6. VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法

    正常情况下在data里面都有做了定义 在函数里面进行赋值 这时候你运行时会发现,数据可以请求到,但是会报错 TypeError: Cannot set property 'listgroup' of ...

  7. cordova微信支付回调App闪退

    这是cordova版本太高,不兼容这个插件所导致的.解决方案是修改$your_project/plugins/cordova-plugin-wechat/scripts/android-install ...

  8. SpringMVC配置三大组件

    1.组件扫描器 使用组件扫描器省去在spring容器配置每个Controller类的繁琐. 使用<context:component-scan>自动扫描标记@Controller的控制器类 ...

  9. 工程师常犯的web后台界面用户体验错误

  10. has invalid type <class 'numpy.ndarray'>, must be a string or Tensor

    转自: https://blog.csdn.net/jacke121/article/details/78833922 has invalid type <class 'numpy.ndarra ...