1445 变色DNA

有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1,2...N-1。研究发现这只狼的基因中存在一个变色矩阵,记为colormap,如果colormap[i][j]='Y'则这只狼可以在某一个夜晚从颜色i变成颜色j(一晚不可以变色多次),如果colormap[i][j]=‘N’则不能在一个晚上从i变成j色。进一步研究发现,这只狼每次变色并不是随机变的,它有一定策略,在每个夜晚,如果它没法改变它的颜色,那么它就不变色,如果存在可改变的颜色,那它变为标号尽可能小的颜色(可以变色时它一定变色,哪怕变完后颜色标号比现在的大)。现在这只狼是颜色0,你想让其变为颜色N-1,你有一项技术可以改变狼的一些基因,具体说你可以花费1的代价,将狼的变色矩阵中的某一个colormap[i][j]='Y'改变成colormap[i][j]='N'。问至少花费多少总代价改变狼的基因,让狼按它的变色策略可以从颜色0经过若干天的变色变成颜色N-1。如果一定不能变成N-1,则输出-1.
Input
多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5
每组测试数据有相同的结构构成:
每组数据第一行一个整数N,2<=N<=50。
之后有N行,每行N个字符,表示狼的变色矩阵,矩阵中只有‘Y’与‘N’两种字符,第i行第j列的字符就是colormap[i][j]。
Output
每组数据一行输出,即最小代价,无解时输出-1。
Input示例
3
3
NYN
YNY
NNN
8
NNNNNNNY
NNNNYYYY
YNNNNYYN
NNNNNYYY
YYYNNNNN
YNYNYNYN
NYNYNYNY
YYYYYYYN
6
NYYYYN
YNYYYN
YYNYYN
YYYNYN
YYYYNN
YYYYYN
Output示例
1
0
-1

如果colormap[i][j]可以变色的话 有一个必须成立的条件那就是1~j-1之间没有‘Y’存在 因为他变色的颜色的标号要尽量小 所以colormap[i][j]变色的代价就是 1~j-1之间‘Y’的数量  之后再跑SPFA求 0~n-1的最短路即可

 1 #include <cctype>
 2 #include <cstdio>
 3 #include <vector>
 4 #include <algorithm>
 5
 6 const int MAXN=60;
 7 const int MAXM=1000000;
 8 const int INF=0x7fffffff;
 9
10 int t,n;
11
12 int dis[MAXN],q[MAXM];
13
14 bool vis[MAXN];
15
16 char s[MAXN];
17
18 std::vector<int> Graph[MAXN];
19
20 inline void SPFA() {
21     for(int i=1;i<=n;++i) vis[i]=false,dis[i]=INF;
22     int head=0,tail=0;
23     q[++tail]=1;
24     dis[1]=0;
25     while(head<tail) {
26         int u=q[++head];
27         vis[u]=false;
28         for(int i=0;i<Graph[u].size();++i) {
29             int v=Graph[u][i];
30             if(dis[v]>dis[u]+i) {
31                 dis[v]=dis[u]+i;
32                 if(!vis[v]) vis[v]=true,q[++tail]=v;
33             }
34         }
35     }
36 }
37
38 int hh() {
39     scanf("%d",&t);
40     while(t--) {
41         scanf("%d",&n);
42         for(int i=0;i<n;++i) Graph[i].clear();
43         for(int i=1;i<=n;++i) {
44             scanf("%s",s);
45             for(int j=1;j<=n;++j)
46               if(s[j-1]=='Y') Graph[i].push_back(j);
47         }
48         SPFA();
49         if(dis[n]==INF) printf("-1\n");
50         else printf("%d\n",dis[n]);
51     }
52     return 0;
53 }
54
55 int sb=hh();
56 int main(int aegc,char**argv) {;}

代码

转载于:https://www.cnblogs.com/whistle13326/p/7536283.html

51Nod 1445 变色DNA相关推荐

  1. 51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)

    1445 变色DNA 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1 ...

  2. bwt比对算法 C语言,DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  3. 51nod图论题解(4级,5级算法题)

    51nod图论题解(4级,5级算法题) 1805 小树 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 她发现她的树的点上都有一个标号(从1到n),这些树都在空 ...

  4. 包含锚点平滑滚动效果/解决锚点链接碰到固定定位问题/导航选中背景变色/固顶/返回顶部效果全...

    <script type="text/javascript">$(function() {//锚点平滑滚动效果 $('a[href*=#],area[href*=#]' ...

  5. 51nod 1617 奇偶数组

    传送门 回来看一眼51nod,发现自己掉到rank4了,赶紧切道题回rank3. 一眼不会做,这种东西应该慢慢找规律吧--然后看到数据范围其实比较小,应该是单次log的,那是不是可以分治啊. #inc ...

  6. php表单偶数变颜色,利用CSS3 nth-child()选择器 实现表格奇偶行变色

    nth-child()简介 CSS3的nth-child() 选择器,我之前很少用,在做表格偶数行变色的时候,我通常在绑定的时候,做一个js判断,来加一个css,从而使表格偶数行和奇数行颜色不一样.这 ...

  7. 区块链技术如何改变我们对DNA的看法

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 试想一下,有人得到了你的一些最私人的信息,并用它来攻击你,窃取你的身份,实施诈骗.这对于你来说特别有压力,对吧?那么,倘 ...

  8. 使复选框选中_勾选复选框单元格变色,自动计数,在Excel中是如何实现的?

    Excel中,我们经常会使用复选框来打勾打叉,这是复选框最基本的功能,相信很多小伙伴都会,但今天我跟大家分享的是复选框的其他操作技巧,勾选复选框变色,统计人数. 下图中,我们要利用复选框是否打钩来确定 ...

  9. 斯坦福AI 5小时DNA测序破世界纪录!创人类新里程碑,成本仅3万

      视学算法报道   编辑:桃子 袁榭 拉燕 [新智元导读]近日,斯坦福大学研究团队把人类DNA测序的时间缩短至5小时2分钟,重新定义了人类基因组测序速度! DNA测序时间减半,还创下了最新吉尼斯世界 ...

最新文章

  1. mysql查看数据库创建语句_mysql-模糊查找数据库和查看数据库的创建语句
  2. python3精要(49)-生成器
  3. C#实现异步消息队列
  4. python遍历目录树_在Python中遍历目录树的速度要快得多?
  5. C++容器遍历时删除元素
  6. New Distinct Substrings(后缀数组)
  7. LeetCode 546. 移除盒子(DP)*
  8. Android主题换肤实现
  9. Python 笔记(一)字典与json使用及注意点
  10. jQuery最核心的基础设施之一——数据缓存模块进化史
  11. 删除none 的images报错 image has dependent child images 解决办法
  12. 抽象代数 04.06可解群和幂零群
  13. 刚办的电信卡显示无服务器,刚刚买的电信卡怎么不能用说什么只限紧急呼叫
  14. OJ密码岛 1243.谢尔宾斯基三角形
  15. 微信小程序二手交易系统ssm框架
  16. 废旧 Android 手机如何改造成 Linux 服务器
  17. 基于MDKA5D31-EK_T70开发板的QT示例-demo09:LM75A温度曲线
  18. 捷径系统智慧健身房管理系统方案
  19. matlab保存nii_Matlab实现NIfTI(ANALYZE)核磁共振图像读写
  20. 经典同步时序逻辑电路分析汇总(第六道)(同步四进制可逆加减法计数器)

热门文章

  1. 樊登讲亲密关系_看了《亲密关系》这本书,原来吵架是牺牲对方来保护自己
  2. python与线性代数 解线性方程组
  3. python中a%b_Python中的a+=b和a=a+b之间的区别是什么?
  4. python 模拟浏览器selenium_使用Selenium模拟浏览器,实现自动爬取数据
  5. Redis学习总结(14)——图解redis五种数据结构底层实现(动图版)
  6. 产品经理学习总结(1)——人人都是产品经理之需求文档语法
  7. 敏捷开发系列学习总结(10)——到底什么是敏捷开发?
  8. Netty学习总结(4)——图解Netty之Pipeline、channel、Context之间的数据流向
  9. linux系统克隆安装教程,使用Clonezilla克隆Linux安装的方法
  10. greenplum配置高可用_0665-6.2.0-如何在CDH中配置HMS高可用