题目链接:https://nanti.jisuanke.com/t/28411

题意:

  给出n(n<=36)个点的一个图。求点覆盖集数。

题解:

  将n个点折半为L和R两部分。对于R内部的边,枚举状态判断是否可行。对可行的状态维护高维前缀和。

  之后判断L内部的可行状态。对于每一个L内部的可行状态,在高维前缀和中找出与他成立的状态相乘就是答案。

#include <bits/stdc++.h>
using namespace std;
const int N = ;
typedef long long ll;
int t;
int n, m, q;
int u, v;
int lef, rig;
int ans;
int w[N<<];
int ltl[N], ltr[N], rtr[N];
int sum[<<N];
int main() {
scanf("%d", &t);
for(int casee = ; casee <= t; casee++) {
ans = ;
scanf("%d%d%d", &n, &m, &q);
for(int i = ; i < n; i++) scanf("%d", &w[i]);
lef = n+>>;
rig = n-lef;
for(int i = ; i < lef; i++) ltl[i] = ltr[i] = ;
for(int i = ; i < rig; i++) rtr[i] = ;
while(m--) {
scanf("%d%d", &u, &v);
u--;v--;
if(u > v) swap(u, v);
if(u < lef) {
if(v < lef) ltl[u] |= <<v;
else ltr[u] |= <<(v-lef);
}
else rtr[u-lef] |= <<(v-lef);
}
for(int i = ; i < (<<rig); i++) {
int res = ;
for(int j = ; j < rig; j++) {
if(i>>j&) res = (1ll*res*w[j+lef])%q;
else res *= (rtr[j]|i) == i;
}
sum[i] = res;
}
for(int i = ; i < rig; i++)
for(int j = ; j < (<<rig); j++)
if(~j>>i&) sum[j] = (sum[j|(<<i)]+sum[j])%q;
for(int i = ; i < (<<lef); i++) {
int res = , need = ;
for(int j = ; j < lef; j++) {
if(i>>j&) res = (1ll*res*w[j])%q;
else res *= (ltl[j]|i) == i, need |= ltr[j];
}
ans = (1ll*res*sum[need]+ans)%q;
}
printf("Case #%d: %d\n", casee, ans);
}
}

2018宁夏邀请赛K Vertex Covers的更多相关文章

  1. 2018宁夏邀请赛K题Vertex Covers(高维前缀和 状压 折半

    https://vjudge.net/problem/Gym-102222K 题意:给定N点M边的无向图,每个点有点权.  点覆盖表示某个点集S{}覆盖了所有的边,其贡献是S中点权之积. 现在让你求所 ...

  2. 2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树)

    2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树) 传送门:https://nanti.jisuanke.com/t/41296 题意: 给一个数列A 问在数列A中有多 ...

  3. “2018宁夏邀请赛 ” 兼 “The 2019 Asia Yinchuan First Round Online Programming”

    ------------7题弟弟,被各位半小时13题的大佬打惨了(滑稽)---------- 签到题就不写了. F :Moving On            (1247ms) 题意:给定大小为N的带 ...

  4. 2018宁夏邀请赛网赛 I. Reversion Count(java练习题)

    题目链接 :https://nanti.jisuanke.com/t/26217 Description: There is a positive integer X, X's reversion c ...

  5. 2018宁夏邀请赛L Continuous Intervals

    题目链接:https://nanti.jisuanke.com/t/28412 题意: 给出n个数的序列.问序列中有多少个区间满足,排序完之后任意两个相邻的数之差不大于1. 题解: 用max表示区间最 ...

  6. 2018宁夏邀请赛G(DFS,动态规划【VECTOR<PAIR>】)

    //代码跑的很慢四秒会超时,结尾附两秒代码(标程) #include<bits/stdc++.h>using namespace std;typedef long long ll;cons ...

  7. 2018宁夏邀请赛I题 bubble sort(思维题

    https://vjudge.net/problem/Gym-102222I 居然补到个防ak,刚开始不知道啥是循环左移右移(只能移一次),不好想.. 题意:以冒泡排序为背景 给你n,k 问在1~n的 ...

  8. [ICPC 2018 宁夏邀请赛] A-Maximum Element In A Stack(思维)

    >传送门< 前言 辣鸡网络赛,虽然我是个菜鸡,然而好几个队伍十几分钟就AK???我心态那会彻底崩了,后来群里炸了,话题直接上知乎热搜,都是2018ICPC宁夏网络赛原题,这怎么玩,拼手速? ...

  9. 2018宁夏邀请赛 Continuous Intervals(单调栈 线段树

    https://vjudge.net/problem/Gym-102222L 题意:给你n个数的序列,让判断有几个区间满足排完序后相邻两数差都不大于1. 题解:对于一个区间 [L,R],记最大值为 m ...

随机推荐

  1. python练习笔记

    python练习笔记,装饰器.定制方法生成特定的类 # -*- coding: utf-8 -*- def catch_exception(func): def wrap(self, *args, * ...

  2. python学习——基本数据类型

    一.运算符 1.算术运算: 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 二.基本数据类型 1.数字 1.1 整形数字和长整形数字:在32位机器上,整数的位数为32位,取值范围为-2**31 ...

  3. Python爬虫爬取百度翻译之数据提取方法json

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统 说明:本例为实现输入中文翻译为英文的小程序,适合Python爬虫的初学者一起学习,感兴趣的可以做英文翻译为中文的 ...

  4. (数据科学学习手札18)二次判别分析的原理简介&Python与R实现

    上一篇我们介绍了Fisher线性判别分析的原理及实现,而在判别分析中还有一个很重要的分支叫做二次判别,本文就对二次判别进行介绍: 二次判别属于距离判别法中的内容,以两总体距离判别法为例,对总体G1,, ...

  5. shell重温---基础篇(输入/输出重定向)

        大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准 ...

  6. 总结Verilog中always语句的使用

    always语句包括的所有行为语句构成了一个always语句块.该always语句块从仿真0时刻开始执行其中的行为语句:最后一条执行完成后,再开始执行其中的第一条语句,如此往复循环,直到整个仿真结束. ...

  7. kylin实战系列(一)

    kylin实战系列(一) 把之前kylin的实践小结一下,以备以后查看.

  8. android开发过程中项目中遇到的坑----布点问题

    我们在红点push 的到达和点击的地方,都加了布点.后来功能上了线,发现,每天的点击都比到达高! 这肯定不科学. 赶紧查问题,打开程序,发红点,关闭程序,布点上传.没问题.数据部门可以收到红点啊! 从 ...

  9. nginx error_page

    1. error_page语法 语法: error_page code [ code... ] [ = | =answer-code ] uri | @named_location 默认值: no 使 ...

  10. MYSQL--事务处理(转)

    事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如 ...