3018: [Usaco2012 Nov]Distant Pastures
3018: [Usaco2012 Nov]Distant Pastures
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 43 Solved: 20
Description
Farmer John's farm is made up of an N x N grid of pastures, where each pasture contains one of two different types of grass. To specify these two types of grass, we use the characters ( and ), so for example FJ's farm might look like the following grid:
(())
)()(
)(((
))))
When Bessie the cow travels around the farm, it takes her A units of time to move from a pasture to an adjacent pasture (one step north, south, east, or west) with the same grass type, or B units of time to move to an adjacent pasture with a different grass type. Whenever Bessie travels from one pasture to a distant pasture, she always uses a sequence of steps that takes the minimum amount of time. Please compute the greatest amount of time Bessie will ever need to take while traveling between some pair of pastures on the farm.
问题描述
给定一个n×n的一个网格,每个格子有一个字符,要么是’(‘,要么是’)’。每个格子和它的上下左右的四个格子相邻,对于相邻的两个格子x和y,从x走到y的过程中,如果x和y中的字符相同,消耗A单位时间,如果x和y中字符不同,消耗B单位时间。定义点S到点T的时间为D(S,T),现在想请你求出网格中最大的D(S,T)。
Input
第一行三个整数n,A,B;
接下来n行描述这个n×n的网格。
Output
一个整数,最大的D(S,T)。
Sample Input
3 1 2 ((( ()( (()
Sample Output
5 样例说明 左上角到右下角所需的时间为5,是最大值。 数据范围 100%的数据满:1 <= n <= 30,1 <= A <= 1,000,000,1 <= B <= 1,000,000。
HINT
Source
题解:本来一开始想到的是floyd暴力乱搞,但是在这里面复杂度是O(N^6)的,显然爆(HansBug:更何况这么稀疏的图这么玩不挂才怪= =)
于是根据囧神(HansBug:orzJSZKC)的做法,开始枚举起点玩spfa,于是居然很神奇的AC了QAQ(HansBug:我去这都能A,不过再一看N<=30也就懂了^_^)
(PS:我居然成了继囧神以后第一个Pascal秒掉此题的人了么么哒)
1 /**************************************************************
2 Problem: 3018
3 User: HansBug
4 Language: Pascal
5 Result: Accepted
6 Time:904 ms
7 Memory:808 kb
8 ****************************************************************/
9
10 type
11 point=^node;
12 node=record
13 g,w:longint;
14 next:point;
15 end;
16 var
17 i,j,k,l,m,n,x,y,f,r:longint;
18 a:array[0..10000] of point;
19 c,g:array[0..10000] of longint;
20 d:array[0..100000] of longint;
21 b:array[0..50,0..50] of longint;
22 ch:char;p:point;
23 function max(x,y:longint):longint;
24 begin
25 if x>y then max:=x else max:=y;
26 end;
27 function trans(x,y:longint):longint;
28 begin
29 exit((x-1)*n+y);
30 end;
31 procedure add(x,y,z:longint);
32 var p:point;
33 begin
34 new(p);p^.g:=y;p^.w:=z;p^.next:=a[x];a[x]:=p;
35 new(p);p^.g:=x;p^.w:=z;p^.next:=a[y];a[y]:=p;
36 end;
37 procedure spfa(z:longint);
38 var i,j,f,r:longint;p:point;
39 begin
40 fillchar(g,sizeof(g),0);
41 fillchar(c,sizeof(c),-1);
42 d[1]:=z;f:=1;r:=2;g[z]:=1;c[z]:=0;
43 while f<r do
44 begin
45 p:=a[d[f]];
46 while p<>nil do
47 begin
48 if (c[p^.g]=-1) or (c[p^.g]>(c[d[f]]+p^.w)) then
49 begin
50 c[p^.g]:=c[d[f]]+p^.w;
51 if g[p^.g]=0 then
52 begin
53 g[p^.g]:=1;
54 d[r]:=p^.g;
55 inc(r);
56 end;
57 end;
58 p:=p^.next;
59 end;
60 g[d[f]]:=0;inc(f);
61 end;
62 for i:=1 to n do for j:=1 to n do l:=max(l,c[trans(i,j)]);
63 end;
64
65 begin
66 readln(n,x,y);
67 for i:=1 to n*n do a[i]:=nil;
68 for i:=1 to n do
69 begin
70 for j:=1 to n do
71 begin
72 read(ch);
73 case ch of
74 '(':b[i,j]:=1;
75 ')':b[i,j]:=0;
76 end;
77 end;
78 readln;
79 end;
80 for i:=1 to n do
81 for j:=1 to n do
82 begin
83 if i<n then add(trans(i,j),trans(i+1,j),abs(b[i,j]-b[i+1,j])*(y-x)+x);
84 if j<n then add(trans(i,j),trans(i,j+1),abs(b[i,j]-b[i,j+1])*(y-x)+x);
85 end;
86 l:=0;
87 for i:=1 to n*n do spfa(i);
88 writeln(l);
89 readln;
90 end.
- 腾讯AI Lab俞栋:AI的发展需要合作伙伴一起AI in ALL
- NLP+2vec︱认识多种多样的2vec向量化模型
- 深度学习数据集(一)
- 将Spring Boot应用程序部署到Bluemix
- Opencv学习(一)——安装配置遇到的问题
- The .NET of Tomorrow
- 国内自动驾驶企业在美国首秀其最新L4级自动驾驶货运卡车
- Nginx源码安装及调优配置
- Greenplum 简单性能测试与分析
- CentOS6 安装couchdb2 集群
- 如何遍历维数和各维上限未定的多维数组
- 求长度的另一种方法(""+obj).Length
- ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
- GreenPlum 简单性能测试与分析(续)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【tensorflow2.0】低阶api--张量操作、计算图、自动微分
- mybatis之第一个mybatis程序(一)
- 进程间通信
- django-表单之创建表单(一)
- 原来sqlite3_get_table() 是这样抓取数据的!!!
- 【tensorflow2.0】中阶api--模型、损失函数、优化器、数据管道、特征列等
- 最短路径Dijkstra算法的简单实现
- django-表单之获取表单信息(二)
- 【tensorflow2.0】高阶api--主要为tf.keras.models提供的模型的类接口
- django-表单之模型表单(三)
- sqlite3数据库封装 - 动态链接库
- 【tensorflow2.0】张量的结构操作
- 指针*和引用&的区别使用
- django-表单之手动渲染(五)
- django-表单之模型表单渲染(六)