Tyvj3308毒药解药题解
题目大意
这些药都有可能在治愈某些病症的同一时候又使人患上某些别的病症……经过我天才的努力。最终弄清了每种药的详细性能,我会把每种药能治的病症和能使人患上的病症列一张清单给你们,然后你们要依据这张清单找出能治愈全部病症的最少药剂组合……顺便说一声,病症的数目不超过10种。我的药是用不完的,就是说每种药剂都能够被反复使用。题解
二进制表示患病状态(2n≤1024种)和每种药的治病与致病状态,然后从2n−1到0開始连有向边,然后bfs出最短路就可以。感觉这样对付一道搜索题大材小用了。Code
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 200000, nil = 0, maxm = 21, oo = 1000000000;
int n, m, map[maxm][105];
int cur[105], inf[105];//cure infect
int u[maxn], v[maxn], nxt[maxn], pnt[1 << maxm], e;
bool vis[1 << maxm];
int d[1 << maxm];
void add(int a, int b)
{
u[++e] = a; v[e] = b;
nxt[e] = pnt[a]; pnt[a] = e;
}
void init()
{
int x;
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; ++i)
{
for(int j = 1; j <= n; ++j)
{
scanf("%d", &x);
if(x == 1)
{
cur[i] |= (1 << (j - 1));
}
if(x == -1)
{
inf[i] |= (1 << (j - 1));
}
}
}
for(int i = (1 << n) - 1; i > 0; --i)
{
for(int j = 1; j <= m; ++j)
{
add(i, (i & (~cur[j])) | inf[j]);
}
}
}
void work()
{
queue <int> Q;
memset(d, 0x3f, sizeof(d));
Q.push((1 << n) - 1);
d[(1 << n) - 1] = 0;
vis[(1 << n) - 1] = true;
while(!Q.empty())
{
int t = Q.front();
Q.pop();
for(int j = pnt[t]; j != nil; j = nxt[j])
{
if(!vis[v[j]])
{
d[v[j]] = d[t] + 1;
vis[v[j]] = true;
Q.push(v[j]);
}
}
}
if(d[0] > oo) puts("The patient will be dead.");
else printf("%d\n", d[0]);
}
int main()
{
init();
work();
return 0;
}
Tyvj3308毒药解药题解的更多相关文章
- 解药还是毒药(codevs 2594)
2594 解药还是毒药 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description Smart研制出对 ...
- codevs 2594 解药还是毒药
2594 解药还是毒药 http://codevs.cn/problem/2594/ 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原 ...
- Hash_P1026毒药?解药?
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> ...
- 【BFS】【位运算】解药还是毒药
[codevs2594]解药还是毒药 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别 ...
- codevs2594解药还是毒药(状压dp)
2594 解药还是毒药 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Smart研制出对付各种症状的解药,可是 ...
- vijosP1026毒药?解药?
hash. 怎么感觉叫状态压缩bfs比较合适呢? #include<cstdio> #include<algorithm> #include<cstring> us ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
随机推荐
- Xpath - Xpath定位
selenium 提供的xpath定位方法名为:find_element_by_xpath(xpath表达式) Xpath基本定位语法: / 绝对定位,从根节点选取 // 相对定位,从匹配选择的当前 ...
- ssh免密码登录远程服务器(不采用securecrt登录)
http://blog.csdn.net/leexide/article/details/17252369 Linux/UNIX下使用ssh-keygen设置SSH无密码登录 标签: ...
- TOJ4168: Same Digits
4168: Same Digits Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 11 ...
- Windows杂技
WINDOWS下 ,在某目录下按住shift加鼠标右键,可以直接有当前目录的dos窗口 win10不能用 解决办法是在当前文件夹的地址栏输入cmd然后回车 发现Powershell可以当作dos执行相 ...
- ie7中position:fixed定位后导致margin:0 auto;无效
布局网页时,需要把header固定在上方.直接使用position:fixed;现代浏览器以及ie8以上均正常显示,但是ie7中,header里面的子元素设置的水平居中并没有效果.做了各种尝试,都没有 ...
- Common JS、AMD、CMD和UMD的区别
一.CommonJS 1.CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API.它的终极目标是提供一个类似Python,Ruby和Java标准库.CommonJs 是服务器 ...
- Java面试题之final、finally和finalize的区别
final: final是一个修饰符,可以修饰变量.方法和类,如果final修饰变量,意味着变量的值在初始化后不能被改变: 防止编译器把final域重排序到构造函数外:(面试的时候估计答出这个估计会加 ...
- hdu 3264 圆的交+二分
Open-air shopping malls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- build android on macOS
http://blog.csdn.net/loften_93663469/article/details/51503293 @import url(http://i.cnblogs.com/Load. ...
- 去掉 NavigationBar 底部的那条黑线
//加入下面两行代码即可[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UI ...