#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
int snum,n,m,sum,flag;
int map[35][35];
int hum[35][35];
char st[500];
int c,mmax;
int num[30],tt[30];
int so[30];
int v[30];
int judge()
{
int i;
for(i=1;i<=mmax;i++)
{
if(v[i] ==0)
return 0;
}
return 1;
}
void dfs(int x)
{
if(flag)
return;
if(judge()==1)
{
flag=1;
return ;
}
int i,j,k;
int tmp;
tmp=so[x] ; memset(num,0,sizeof(num));
for(j=1;j<=mmax;j++)
{
if(hum[x] [j] >0&&v[j] ==0)
{
for(k=1;k<=mmax;k++)
{
if(hum[j] [k] >0&&v[k] ==0)
num[j] ++;
}
tmp+=(so[j] /(num[j] +1));
}
}
// cout<<"tem=="<<tmp<<" "<<snum<<endl; if(tmp<snum)
{
// cout<<"1"<<endl;
v[x] =1;
for(j=1;j<=mmax;j++)
{
tt[j] =so[j] ;
// cout<<"hun[1][1]="<<hum[x][j]<<endl;
// cout<<"v[1]="<<v[j]<<endl;
if(hum[x] [j] >0&&v[j] ==0)
{
so[j] -=(so[j] /(num[j] +1));
}
}
// cout<<"2"<<endl;
for(i=1;i<=mmax;i++)
{
// if(i==x)dfs(i);
// else{
if(v[i] ==0)
dfs(i);
flag=judge();
//if(flag)return;
// cout<<"try"<<endl; // cout<<"try2"<<endl;
// }
}
// if(!flag){
v[x] =0;
// cout<<"try3"<<endl;
for(j=1;j<=mmax;j++)
{
// cout<<"try4"<<endl;
if(hum[x] [j] >0&&v[j] ==0)
{
so[j] +=(tt[j] /(num[j] +1));
}
}
// cout<<"try5"<<endl;
// }
}
// cout<<"try6"<<endl;
return;
} int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
cin>>n>>m;
mmax=0;
memset(hum,0,sizeof(hum));
for(i=1;i<=n;i++)
{
scanf("%s",st);
for(j=0;j<m;j++)
{
map[i] [j+1]=st[j] -'A'+1;
c=map[i] [j+1];
if(c>mmax)
mmax=c;
} }
for(i=1;i<=mmax;i++) scanf("%d",&so[i]);
scanf("%d",&snum); for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(i+1<=n&&map[i] [j] !=map[i+1][j] )
{
hum[map[i] [j] ][map[i+1][j] ]=hum[map[i+1][j] ][map[i] [j] ]=1;
}
if(j+1<=n&&map[i] [j] !=map[i] [j+1])
{
hum[map[i] [j] ][map[i] [j+1]]=hum[map[i] [j+1]][map[i] [j] ]=1;
}
if(i-1>0&&map[i] [j] !=map[i-1][j] )
{
hum[map[i] [j] ][map[i-1][j] ]=hum[map[i-1][j] ][map[i] [j] ]=1;
}
if(j-1>0&&map[i] [j] !=map[i] [j-1])
{
hum[map[i] [j] ][map[i] [j-1]]=hum[map[i] [j-1]][map[i] [j] ]=1;
}
}
}
flag=0;
// cout<<"1hhe"<<endl;
for(i=1;i<=mmax;i++)
{
if(flag==1)
break;
dfs(i);
}
// cout<<"hhe"<<endl;
if(flag)
{
printf("Saruman\n");
}
else
printf("Human\n");
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

临时文档9--dfs的更多相关文章

  1. Spring MVC学习总结(13)——Spring MVC集成Swagger时文档无法排序问题

    添加排序属性: window.swaggerUi = new SwaggerUi({      ...      apisSorter: "alpha", // can also ...

  2. WebAPI使用多个xml文件生成帮助文档

    一.前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet.WebApi.HelpPage)可以根据注释生成帮助文档,查看代码实现会发现是基于解析项目生成的xm ...

  3. WebAPI使用多个xml文件生成帮助文档(转)

    http://www.cnblogs.com/idoudou/p/xmldocumentation-for-web-api-include-documentation-from-beyond-the- ...

  4. VC多文档编程技巧(取消一开始时打开的空白文档)

    VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...

  5. 使用YUIDoc生成JS文档

    其实YUIDoc主页已经写的比较清晰了,但有一些概念和细节再点出一些注意的地方. 目前最新的YUIDoc使用nodejs进行开发安装和使用都非常的方便. 我们只需要将我们的代码加上必要的注释,便可以很 ...

  6. SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  7. WORD文档中插入页码的问题

    原文链接:http://www.360doc.com/content/11/0216/15/849254_93539436.shtml 一.页码从第二页开始1.选择“插入-页码”,打开“页码”对话框. ...

  8. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

  9. js获取窗口滚动条高度、窗口可视范围高度、文档实际内容高度、滚动条离浏览器底部的高度

    1.获取窗口可视范围的高度 //获取窗口可视范围的高度 function getClientHeight(){ var clientHeight=0; if(document.body.clientH ...

随机推荐

  1. IMAP收邮件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. 网页热力图 heatmap js

    HBuilder +js 实现网页热力图 废话不多说,上代码 <!DOCTYPE html> <html> <head> <title>111</ ...

  3. Discuz X3.2 分区 gid 完美伪静态方法 Apache/Nginx

    Discuz 官方给出的伪静态规则并不完整,只实现了部分的伪静态设置及规则,分区 gid 仍然是 forum.php?gid=xxx 的形式,对于有强迫症的我是无法忍受的,下面给出分区 gid 的伪静 ...

  4. 使用sqoop将mysql数据导入到hadoop

    hadoop的安装配置这里就不讲了. Sqoop的安装也很简单. 完成sqoop的安装后,可以这样测试是否可以连接到mysql(注意:mysql的jar包要放到 SQOOP_HOME/lib 下): ...

  5. 利用Newtonsoft.Json实现Json序列化与反序列化

    在项目中用到了Newtonsoft.Json来实现序列化和反序列化,在这里写下实现代码. 1.创建类用于排除不序列化的属性 public class ExcludePropertiesContract ...

  6. Java程序员要注意的10个问题————————好东西就是要拿来分享

    [本文来自优优码:http://www.uucode.net/201406/ten-issue-for-java],好东西就是要拿来分享 1. Array 转为 ArrayList 很多人会这么写: ...

  7. lldb

    所有命令选择与input 值用  -- 区分 1 p/x 16 转16进制 https://sourceware.org/gdb/onlinedocs/gdb/Output-Formats.html ...

  8. JS对文本框值的判断

    JS判断只能是数字和小数点(摘录自其它资料,在此发表只为个人以后使用查找方便) 1.文本框只能输入数字(不包括小数点) <input onkeyup="this.value=this. ...

  9. poj 3641 Pseudoprime numbers

    题目连接 http://poj.org/problem?id=3641 Pseudoprime numbers Description Fermat's theorem states that for ...

  10. vnext 技术两篇文章和评论

    研究vnext的两篇 好文章,重点看评论! http://www.cnblogs.com/shanyou/p/4589930.html http://www.cnblogs.com/shanyou/p ...