hdu 5506 bitset 优化
来源:互联网 发布:淘宝上找货源 编辑:程序博客网 时间:2024/05/19 03:44
题意:n个数组,划分成l个集合,每个集合至少有一个数组,并且一个集合中的数组至少要有一个相同的数,问你是否存在这样的划分方案
思路:L比较小,直接暴力每个数组是在哪个集合里,大约30^5 同时用bitset维护某种集合是否合法,总时间复杂度30^5*300/64 看上去非常的大,其实加上合法性剪纸跑的还是飞快的。。。甚至0ms 。。。黑人问号???
PS.随便搜搜有没有bitset优化的题目,这个题本身不用bitset也完全可以。。因为单个集合元素很少啊。。。300/64感觉未必就比10 能快多少。。。
代码:
#include<bits/stdc++.h>using namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair#define X first#define Y secondtypedef unsigned long long ll;typedef pair<int,int> pii;using namespace std;int n,m,k,x,y,l,t;bitset<302> B[31];int dfs(int id,int st,vector<bitset<302> >o,int ans){ if(id==n&&ans==(1<<l)-1) return 1; if(id==n) return 0; if((o[st]&=B[id]).count()){ for(int j=0;j<l;j++) if(dfs(id+1,j,o,ans|(1<<j))) return 1; } return 0;}int main(){ cin>>t; while (t--) { cin>>n>>l; for(int i=0;i<n;i++){ cin>>x;B[i].reset(); while(x--) cin>>y,B[i].set(y); } vector<bitset<302> > O(l); for(int i=0;i<l;i++) O[i].flip(); for(int i=0;i<l;i++)if(dfs(0,i,O,1<<i)) goto ge; puts("NO");continue; ge: puts("YES"); } return 0;}
阅读全文
1 0
- hdu 5506 bitset 优化
- hdu 6085 bitset优化
- hdu 6085(bitset优化)
- hdu 5745 dp+bitset优化
- HDU 5745 dp, bitset优化
- [HDU 5782] Cycle (bitset优化+脑洞)
- HDU 5890 Eighty seven(bitset优化dp)
- hdu 5890 01背包(bitset优化)
- bitset优化
- hdu-Bitset
- hdu 5036 概率+期望+bitset优化
- hdu 5313 Bipartite Graph(二分图染色+dp+bitset优化)
- HDU 5745 La Vie en rose(DP+bitset优化)
- hdu 5745 La Vie en rose(dp + bitset优化)
- HDU 5745 La Vie en rose bitset优化dp
- 【HDU 5890】Eighty seven(bitset+DP+优化)
- HDU 5972 Regular Number Bitset优化字符串匹配
- hdu 5745 La Vie en rose(bitset优化dp)
- ImageNet Classification with Deep Convolutional Neural Networks
- POJ-Dungeon Master
- Hibernate中@ManyToOne单向外键
- F
- 488. Zuma Game
- hdu 5506 bitset 优化
- ThinkInJava(Java编程思想总结)2017.8.9-------操作符
- I Hate It---线段树
- C++中参数传递的两种方式:传值与传址及它们的区别
- nginx.conf配置详解
- Xamrin.Forms 用户界面——控件——Style——设备样式
- LeetCode547. Friends Circles 利用union find | bfs | dfs三种方法解决
- 开启科研之路,写此文以作纪念!
- Linux 问题解决拾遗