#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. js设计模式(12)---职责链模式

    0.前言 老实讲,看设计模式真得很痛苦,一则阅读过的代码太少:二则从来或者从没意识到使用过这些东西.所以我采用了看书(<js设计模式>)和阅读博客(大叔.alloyteam.聂微东)相结合 ...

  2. IOS多线程(一)

    一.绪论 1.进程:平时看到的一个应用程序,即可算作一个线程. 每个进程都有一个PID作为进程ID,有一个Process Name作为进程名字等. 2.线程:一个进程可以有多个线程,而每个线程只可属于 ...

  3. PeopleCode 处理压缩文件

     PeopleSoft中对文件附件的处理都是单个文件处理的,虽然在8.52版本新增了MAddAttachment(URLDestination, DirAndFilePrefix, Prompts, ...

  4. pthreads多线程数据采集

    以前使用curl的多线程并不是真正的多线程,只是一种模拟的多线程,现在使用pthreads来实现真正意义上的多线程. 下载: windows下: http://windows.php.net/down ...

  5. php手册学习

    整型:int   转换为整型:intval(str)  32位最大值64位最大值 不存在整除语法:应用round();四舍五入.integer去除小数. $a = 1234; //十进制数 $a = ...

  6. (转)Android系统自带Activity样式(@android:style/)

    在AndroidManifest.xml文件的activity中配置 1.android:theme="@android:style/Theme" 默认状态,即如果theme这里不 ...

  7. sql 子查询要命名

    Date1 from ( select distinct Date1 from TableName where Date1 > '2013-5-1' )A --这里加个A,B,C随便你 或者as ...

  8. SymPy库常用函数

    简介 SymPy是一个符号计算的Python库.它的目标是成为一个全功能的计算机代数系统,同时保持代码简 洁.易于理解和扩展.它完全由Python写成,不依赖于外部库.SymPy支持符号计算.高精度计 ...

  9. goto语句 switch语句

    goto语句 #include <iostream> using namespace std; int main() { int i = 1; number: i++; std::cout ...

  10. 浅谈HAL

    参考:http://blog.csdn.net/mr_raptor/article/details/8074549 代码实现:http://blog.csdn.net/mr_raptor/articl ...