2018宁夏邀请赛K Vertex Covers
题目链接: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的更多相关文章
- 2018宁夏邀请赛K题Vertex Covers(高维前缀和 状压 折半
https://vjudge.net/problem/Gym-102222K 题意:给定N点M边的无向图,每个点有点权. 点覆盖表示某个点集S{}覆盖了所有的边,其贡献是S中点权之积. 现在让你求所 ...
- 2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树)
2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树) 传送门:https://nanti.jisuanke.com/t/41296 题意: 给一个数列A 问在数列A中有多 ...
- “2018宁夏邀请赛 ” 兼 “The 2019 Asia Yinchuan First Round Online Programming”
------------7题弟弟,被各位半小时13题的大佬打惨了(滑稽)---------- 签到题就不写了. F :Moving On (1247ms) 题意:给定大小为N的带 ...
- 2018宁夏邀请赛网赛 I. Reversion Count(java练习题)
题目链接 :https://nanti.jisuanke.com/t/26217 Description: There is a positive integer X, X's reversion c ...
- 2018宁夏邀请赛L Continuous Intervals
题目链接:https://nanti.jisuanke.com/t/28412 题意: 给出n个数的序列.问序列中有多少个区间满足,排序完之后任意两个相邻的数之差不大于1. 题解: 用max表示区间最 ...
- 2018宁夏邀请赛G(DFS,动态规划【VECTOR<PAIR>】)
//代码跑的很慢四秒会超时,结尾附两秒代码(标程) #include<bits/stdc++.h>using namespace std;typedef long long ll;cons ...
- 2018宁夏邀请赛I题 bubble sort(思维题
https://vjudge.net/problem/Gym-102222I 居然补到个防ak,刚开始不知道啥是循环左移右移(只能移一次),不好想.. 题意:以冒泡排序为背景 给你n,k 问在1~n的 ...
- [ICPC 2018 宁夏邀请赛] A-Maximum Element In A Stack(思维)
>传送门< 前言 辣鸡网络赛,虽然我是个菜鸡,然而好几个队伍十几分钟就AK???我心态那会彻底崩了,后来群里炸了,话题直接上知乎热搜,都是2018ICPC宁夏网络赛原题,这怎么玩,拼手速? ...
- 2018宁夏邀请赛 Continuous Intervals(单调栈 线段树
https://vjudge.net/problem/Gym-102222L 题意:给你n个数的序列,让判断有几个区间满足排完序后相邻两数差都不大于1. 题解:对于一个区间 [L,R],记最大值为 m ...
随机推荐
- jquery之prop与attr区别。
一切看下面代码示例<!DOCTYPE html> <html> <head> <title>全选和反选</title> <script ...
- dedecms添加/编辑文章如何把附加选项去掉默认勾选状态
1.去掉添加时默认勾选状态. 在 系统->系统基本参数->其它选项 中,如图中的三个选项选择否即可. 设置完后可以看到添加时已经默认不勾选,但是编辑文章时还是默认勾选状态. 2.去掉编辑时 ...
- I/O流、序列化
1)流序列化对象ObjectOutputStream调用writerObject写出序列化对象,ObjectInputStream调用readObject读取序列化对象,序列化的对象必须要实现Seri ...
- 20.2 解析与序列化【JavaScript高级程序设计第三版】
JSON 之所以流行,拥有与JavaScript 类似的语法并不是全部原因.更重要的一个原因是,可以把JSON 数据结构解析为有用的JavaScript 对象.与XML 数据结构要解析成DOM 文档而 ...
- ruby编码说明
程序编码一般分几种情况: 1.源码文件编码 2.接收外部内容的编码 3.运行环境编码 4.操作系统编码 首先源码文件的编码,可以通过在ruby文件的头部添加一行申明即可,这样所有在源码里面出现的字符都 ...
- 修复网站漏洞对phpmyadmin防止被入侵提权的解决办法
phpmyadmin是很多网站用来管理数据库的一个系统,尤其是mysql数据库管理的较多一些,最近phpmysql爆出漏洞,尤其是弱口令,sql注入漏洞,都会导致mysql的数据账号密码被泄露,那么如 ...
- C语言实例解析精粹学习笔记——39(简单的文本编辑器)
实例说明: 编辑一个简单的单行文本编辑器,编辑命令有以下几种:(E.Q.R.I.D) 只有自己在完全空白的情况下编写出来的程序,才是真正自己会的程序,现在所做的,不过是程序的搬运工,把书上的程序搬到网 ...
- java程序——从命令行接收多个数字,求和之后输出结果
命令行参数都是字符串,必须先将其转化为数字,才能相加.以下是流程图,源代码和输出结果. 流程图: 源代码: import java.util.Scanner; public class Test { ...
- Migrating from MapReduce 1 (MRv1) to MapReduce 2 (MRv2, YARN)...
This is a guide to migrating from Apache MapReduce 1 (MRv1) to the Next Generation MapReduce (MRv2 o ...
- python语句和语法
python语句和语法 python程序结构: 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. python的语法实质上是有语句和表达式组成的.表达式处理对 ...