2283: [Sdoi2011]火星移民

Time Limit: 40 Sec  Memory Limit: 512 MB
Submit: 119  Solved: 56
[Submit][Status][Discuss]

Description

在2xyz年,人类已经移民到了火星上。由于工业的需要,人们开始在火星上采矿。火星的矿区是一个边长为N的正六边形,为了方便规划,整个矿区被分为6*N*N个正三角形的区域(如图1)。

整个矿区中存在A矿,B矿,C矿三个矿场,和a厂,b厂,c厂三个炼矿厂。每个三角形的区域可以是一个矿场、炼矿厂、山地、或者平地。现在矿区管理局要求建立一个交通系统,使得矿场和对应炼矿厂之间存在一条公路,并且三条公路互不交叉(即一个三角形区域中不存在两条以上运输不同矿的公路)。两个三角形区域是相邻的当且仅当这两个三角形存在公共边,只有相邻的两个区域之间才能建一段路,建这段路的费用为1。注意,山地上是不能建公路的。由于火星金融危机的影响,矿区管理局想知道建立这样一个交通系统最少要花多少费用。更多的,当局向知道有多少种花费最小的方案。

Input

第1行一个整数N。表示这个矿区是边长为N的正六边形。

接下来有6*N*N的整数,分为2*N行,表示矿区当前区域的情况。0表示平地,1,2,3表示对应的矿区或者炼矿厂,4表示山地。(样例1对应图2)。可能有多组数据,请处理到文件结尾

Output

对于每组数据,包含两个整数,表示最小费用和达到最小费用的方案数。如果找不到符合要求的方案,输出-1 -1。由于方案数可能过大,所以请把方案数mod 1000000007

Sample Input

【样例输入1】
2
0 1 0 0 0
0 0 2 0 4 0 0
0 0 4 3 0 3 2
0 0 0 1 0

【样例输入2】
3
0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0 0
0 0 0 0 0 0 3 0 0 0 0
0 0 0 0 0 0 0 0 0
0 3 0 1 0 2 0

Sample Output

【样例输出1】
18 1
【样例输出2】
44 1

HINT

样例2的解释

对于100%的数据,N≤6

Source

//40分dfs
//插头dp不会
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
const int dx[][]={{,,},{-,,}};
const int dy[][]={{,,-},{,,-}};
int n,sx[],sy[],ex[],ey[],mp[N][N];bool vis[N][N];
int ans,sum;
inline void Cl(){
memset(mp,-,sizeof mp);
memset(vis,,sizeof vis);
memset(sx,,sizeof sx);
memset(sy,,sizeof sy);
memset(ex,,sizeof ex);
memset(ey,,sizeof ey);
}
inline void init(){
for(int i=;i<=n;i++){
for(int j=n-i+;j<=n*+i-;j++){
scanf("%d",&mp[i][j]);
int &db=mp[i][j];
if(db>&&db<){
if(!sx[db]) sx[db]=i,sy[db]=j;
else ex[db]=i,ey[db]=j;
}
}
}
for(int i=;i<=n;i++){
for(int j=i;j<=n*-i;j++){
scanf("%d",&mp[i+n][j]);
int &db=mp[i+n][j];
if(db>&&db<){
if(!sx[db]) sx[db]=i+n,sy[db]=j;
else ex[db]=i+n,ey[db]=j;
}
}
}
}
void dfs(int now,int x,int y,int cost){
if(x==ex[now]&&y==ey[now]){
if(now<){
vis[sx[now+]][sy[now+]]=;
dfs(now+,sx[now+],sy[now+],cost);
vis[sx[now+]][sy[now+]]=;
}
else{
if(cost==ans) sum++;
if(cost<ans) ans=cost,sum=;
}
return ;
}
int p=!((x+y&)^(n&));
for(int i=,nx,ny;i<;i++){
nx=x+dx[p][i];ny=y+dy[p][i];
if(!vis[nx][ny]&&(!mp[nx][ny]||mp[nx][ny]==now)){
vis[nx][ny]=;
dfs(now,nx,ny,cost+);
vis[nx][ny]=;
}
}
}
inline void work(){
Cl();init();
ans=2e9;sum=;
vis[sx[]][sy[]]=;
dfs(,sx[],sy[],);
if(sum) printf("%d %d\n",ans,sum);
else printf("-1 -1\n");
}
int main(){
freopen("mars.in","r",stdin);
freopen("mars.ans","w",stdout);
while(~scanf("%d",&n)) work();
return ;
}

[Sdoi2011]火星移民的更多相关文章

  1. BZOJ2283: [Sdoi2011]火星移民

    Description 在2xyz年,人类已经移民到了火星上.由于工业的需要,人们开始在火星上采矿.火星的矿区是一个边长为N的正六边形,为了方便规划,整个矿区被分为6*N*N个正三角形的区域(如图1) ...

  2. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  3. BZOJ 2243: [SDOI2011]染色 [树链剖分]

    2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6651  Solved: 2432[Submit][Status ...

  4. bzoj-2243 2243: [SDOI2011]染色(树链剖分)

    题目链接: 2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6267  Solved: 2291 Descript ...

  5. 【BZOJ2243】[SDOI2011]染色 树链剖分+线段树

    [BZOJ2243][SDOI2011]染色 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的 ...

  6. BZOJ 2286: [Sdoi2011]消耗战

    2286: [Sdoi2011消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2082  Solved: 736[Submit][Status] ...

  7. bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...

  8. 【BZOJ】【2245】【SDOI2011】工作安排

    网络流/费用流 裸题吧……直接建模就好了……所谓的“分段函数”就是吓唬你的,其实就是对于每个人分开建几条流量不同.费用不同的弧而已. 对每种产品,连S->i ,(c[i],0):对每个工作人员 ...

  9. bzoj2243:[SDOI2011]染色

    链剖就可以了.一开始的想法错了.但也非常接近了.妈呀调的要死...然后把字体再缩小一号查错起来比较容易QAQ. #include<cstdio> #include<cstring&g ...

随机推荐

  1. maven 插件之 AutoConfig 工具使用笔记

    AutoConfig 是一款 maven 插件,主要用于 Maven 项目打包使用.在我们的工作中,会将自己写的代码打成 jar 包或者 war 包发布到各种环境上.一般地,不用的环境所使用的数据库. ...

  2. redis学习笔记——Redis过期键的删除策略

    Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ...

  3. 用聚合数据API(苏州实时公交API)快速写出小程序

    利用聚合数据API快速写出小程序,过程简单. 1.申请小程序账号 2.进入开发 3.调用API.比如“苏州实时公交”小程序,选择的是苏州实时公交API. 苏州实时公交API文档:https://www ...

  4. jquery 事件,注册 与重复事件处理

    jquery有时候会出现重复注册一个事件的问题,导致点击一个事件,这个事件被重复执行,也就是触发事件的次数有几次, 那么这个事件就会被执行叠加重复几次. 我这边做的一个项目,在某个页面初始化的时候,给 ...

  5. mysql的innodb数据库引擎详解

    http://www.jb51.net/softjc/158474.html   这篇文章主要介绍了mysql的innodb数据库引擎,需要的朋友可以参考下   一.mysql体系结构和存储引擎 1. ...

  6. RPC框架-yar学习

    RPC采用客户机/服务器模式. 请求程序就是一个客户机,而服务提供程序就是一个服务器.首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息.在服务器端, 进程保持睡眠状态直到调 ...

  7. Sring容器的懒加载lazy-init设置

    默认情况下,spring的IOC容器中lazy-init是false的,即没有打开懒加载模式. 如果你没有看到这个lazy-init 的参数设置就说明是false啦. 那么什么是懒加载? 懒加载--- ...

  8. connect()

    #include <sys/types.h>         #include <sys/socket.h> int connect(int sockfd, const str ...

  9. 基于AFNetworking封装的网络请求工具类【原创】

    今天给大家共享一个我自己封装的网络请求类,希望能帮助到大家. 前提,导入AFNetworking框架, 关于修改AFN源码:通常序列化时做对text/plan等的支持时,可以一劳永逸的修改源代码,在a ...

  10. D - Sigma Function 1~n内有多少个约数和为偶数

    /** 题目:D - Sigma Function 链接:https://vjudge.net/contest/154246#problem/D 题意:求1~n内约数和为偶数的数的个数. 思路:一个数 ...