ps:最近碰到一些用bitset优化常数的题目,以前也有接触但是都没有记下来,所以来写一篇博文 记录以后碰到的类似的题目。


应用一: 优化boolean multiplication

在做dp的时候,有时候会需要将两个dp矩阵相乘,且矩阵的元素都是bool型。

计算矩阵A*B=C     C[i,j]=1 当且仅当存在k,A[i,k]=1 && B[k][j]=1 。

直接算需要O(n3)的时间。可以用bitset 优化常数。 做法如下:

 bitset<N> A[N],B[N],C[N];

 void Multi(bitset<N> A[],bitset<N> B[],bitset<N> C[])
{
for (int i=;i<N;i++)
{
for (int j=;j<N;j++)
{
if (A[i][j]) C[i]|=B[j];
}
}
}

大致思想是:

如果A[i][j]=1,  C[i][k] |= A[i][j] & B[j][k]    <->  C[i][k] |= B[j][k]     相当于把B的第j行拿去 和C的第i行做一次或操作。

题目:

http://codeforces.com/contest/781/problem/D

该题的dp矩阵是boolean矩阵,转移的时候可以用bitset来优化boolean multiplication。

 #include <iostream>
#include <string>
#include <cstring>
#include <map>
#include <cmath>
#include <set>
#include <bitset>
using namespace std; typedef long long ll; #define N 510 bitset<N> dp[][][N]; int main()
{
//freopen("in.in","r",stdin);
//freopen("out.out","w",stdout); int n,m,x,y,z;
scanf("%d%d",&n,&m);
while (m--)
{
scanf("%d%d%d",&x,&y,&z);
x--,y--,dp[][z][x][y]=;
} for (int l=;l<=;l++)
{
for (int i=;i<n;i++)
{
for (int j=;j<n;j++)
{
if (dp[l-][][i][j]) dp[l][][i]|=dp[l-][][j];
if (dp[l-][][i][j]) dp[l][][i]|=dp[l-][][j];
}
}
}
ll ans=; set<int> S; S.insert();
for (int l=,w=;l>= && ans<=1e18;l--)
{
set<int> SS;
for (set<int>::iterator iter=S.begin();iter!=S.end();iter++)
{
int x=*iter;
for (int j=;j<n;j++) if (dp[l][w][x][j]) SS.insert(j);
}
if (!SS.empty()) ans+=1ll<<l,S=SS,w^=;
}
if (ans>1e18) ans=-;
printf("%I64d\n",ans);
return ;
}

待补充...

bitset在acm中的应用的更多相关文章

  1. [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式

    ACM中巧用文件的输入输出来改写acm程序的输入输出 经常有见大神们使用文件来代替ACM程序中的IO,尤其是当程序IO比较复杂时,可以使自己能够更专注于代码的测试,而不是怎样敲输入. C/C++代码中 ...

  2. C++ STL泛型编程——在ACM中的运用

    学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...

  3. 关于 矩阵在ACM中的应用

    关于矩阵在ACM中的应用 1.矩阵运算法则 重点说说矩阵与矩阵的乘法,不说加减法. 支持: 结合律  (AB)C = A(BC) 分配律 A(B+C) = AB + AB $\left( \lambd ...

  4. Java在ACM中的应用

    Java在ACM中的应用 —. 在java中的基本头文件(java中叫包) import java.io.*; import java.util.*; //输入Scanner import java. ...

  5. IO/ACM中来自浮点数的陷阱(收集向)

    OI/ACM中经常要用到小数来解决问题(概率.计算几何等),但是小数在计算机中的存储方式是浮点数而不是我们在作数学运算中的数,有精度的限制. 以下以GUN C++为准,其他语言(或编译器)也差不了多少 ...

  6. ACM中的浮点数精度处理

    在ACM中,精度问题非常常见.其中计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模板一般就不成问题了.精度问题则不好说,有时候一个精度问题就可能成为一道题的瓶颈,让你debu ...

  7. ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏

    ACM 中常用的算法有哪些?作者: 张俊Michael 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法, ...

  8. ACM中Java的应用

    先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...

  9. 从ACM中删除一个已经创建的Library

    从ACM中删除一个已经创建的Library,无法通过界面操作,须要手工从DB中删除.须要删除的表记录有: RECENTUPDATE 找到字段Name等于该libraryName的那条记录删除掉 del ...

随机推荐

  1. AtomicInteger类的简单应用

    AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicIn ...

  2. mybatis 一对多

    person package com.kerwin.mybatis.pojo; import java.util.List; public class Person { private int id; ...

  3. [TypeScript] Export public types from your library

    If you're a library author, it's useful to expose your public types as interfaces, to allow your con ...

  4. wine 魔兽争霸

    连接参见http://linux-wiki.cn/wiki/%E7%94%A8Wine%E8%BF%90%E8%A1%8C%E9%AD%94%E5%85%BD%E4%BA%89%E9%9C%B8III ...

  5. Python 3 初探,第 2 部分: 高级主题

    Python 3 是 Guido van Rossum 功能强大的通用编程语言的最新版本.它虽然打破了与 2.x 版本的向后兼容性,但却清理了某些语法方面的问题.本文是这个由两部分组成的系列文章中的第 ...

  6. Django——基于类的视图源码分析 二

    源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...

  7. java自定义注解与反射

    java注解与反射一.Java中提供了四种元注解,专门负责注解其他的注解,分别如下 1.@Retention元注解,表示需要在什么级别保存该注释信息(生命周期).可选的RetentionPoicy参数 ...

  8. 《windows核心编程》 18章 堆

    堆的优缺点: 优点:让我们专心解决手头问题,不必理会分配粒度和页边界这类事情. 缺点:分配和释放内存块的速度比其他方式慢,而且也无法对物理存储器的调拨和撤销进行直接控制. 什么是堆: 堆就是一块预订的 ...

  9. Centos下Subversion 服务器安装配置

    1.安装 # yum install subversion 2. svn配置 建立svn版本库目录可建多个:2.1 新建文件夹: # mkdir -p /opt/svndata/repos 2.2 建 ...

  10. vs mvc 视图中找不到 viewdata viewbag的解决方案

    1.查看views下的web.config文件是否存在 2.检查config中system.web.mvc ,version中版本号与自己的vs内置mvc版本一致 迁移项目可能有此问题