P1144 -- 恶魔城

时间限制:1000MS      内存限制:131072KB

状态:Accepted      标签:    图论-最短路   二分   无

Description

上帝需要创造一位战士去消灭撒旦,这位战士必须要穿过恶魔城才能与撒旦决斗。恶魔城内有M条连接N个路口(从1到N编号)的街道,每一条街道都是单向的(也就是说你不能逆着该街道指定的方向走),并且在城内无论怎么走都不可能走回原来走过的地方。开始的时候,战士的生命力(HP)为INITHP、站在1号路口,而撒旦在第N号路口等待着他。每一条街道上都有许多魔鬼,但是也有一些街道已经被上帝派去的天使占领了。当战士经过连接i号向j号路口的街道时,如果占领该街道的是恶魔,那么他的HP先加倍然后减少L[i,j],我们记为A[i,j]=-L[i,j];如果占领该街道的是天使,那么他的HP就会先加倍然后增加L[i,j],我们记为A[i,j]=+L[i,j];如果该街道不存在,那么A[i,j]=0。如果某一时刻战士的HP<=0,那么他会死亡。因为这个战士将非常无敌,当他见到撒旦的时候只要还活着,就能一口气把撒旦消灭,所以上帝不希望让他的INITHP过高。

任务:给定N,A[1..N,1..N],求最小的INITHP,使这个战士能够活着见到撒旦。

Input Format

第一行有一个正整数N(3 N 100),下面跟着的第i行第j个数为A[i,j](绝对值不超过10000的整数

Output Format

输出所求最小的INITHP。

Sample Input

  1. 4
  2. 0 -4 0 -10
  3. 0 0 +3 0
  4. 0 0 0 -14
  5. 0 0 0 0

Sample Output

  1. 4

Hint

HP都为整数。

题解

因为要求HP的最小值,那么首先想到二分答案。由题目得A[i][j]的绝对值不大于10000,那么二分区间就是[1,10000]。由于最多只会有一百个点,所以可以用深搜来判定。注意由于HP不断乘二,所以到最后的数值会很大,如何解决呢?不难发现,因为A[i][j]的绝对值不大于10000,只要HP大于等于10000,那么必然可以到达终点,所以可以设10000为INF,一旦HP超过INF,就设成INF。

代码

  1. #include <cstdio>
  2. #include <iostream>
  3. #define MAXN 110
  4. #define SIZE 100000
  5. #define INF 10005
  6. using namespace std;
  7.  
  8. char B[<<],*S=B,*T=B;char getc(){
  9. return S==T&&(T=(S=B)+fread(B,,<<,stdin),S==T)?:*S++;
  10. }
  11. #define isd(c) (c>='0'&&c<='9')
  12. int aa,bb;char ch;int Scan(){
  13. while(ch=getc(),!isd(ch)&&ch!='-');ch=='-'?aa=bb=:(aa=ch-'',bb=);
  14. while(ch=getc(),isd(ch))aa=aa*+ch-'';return bb?aa:-aa;
  15. }
  16.  
  17. struct EDGE {
  18. int To, Next, W;
  19. };
  20.  
  21. int N;
  22. int A[MAXN][MAXN];
  23. EDGE E[SIZE];
  24. int Top, Last[MAXN];
  25.  
  26. int Min(int A, int B) {
  27. return A < B ? A : B;
  28. }
  29.  
  30. void Add(int A, int B, int C) {
  31. ++Top;
  32. E[Top].To = B;
  33. E[Top].Next = Last[A];
  34. E[Top].W = C;
  35. Last[A] = Top;
  36. }
  37.  
  38. bool DFS(int HP, int X) {
  39. if (X == N) return ;
  40. for (int i = Last[X]; i; i = E[i].Next) {
  41. if (HP * + E[i].W > ) {
  42. if (DFS(Min(HP * + E[i].W, INF), E[i].To)) return ;
  43. }
  44. }
  45. return ;
  46. }
  47.  
  48. int main() {
  49. N = Scan();
  50. for (int i = ; i <= N; ++i) {
  51. for (int j = ; j <= N; ++j) {
  52. A[i][j] = Scan();
  53. if (A[i][j] != ) Add(i, j, A[i][j]);
  54. }
  55. }
  56. int L = , R = INF;
  57. while (L <= R) {
  58. int Mid = (L + R) >> ;
  59. if (DFS(Mid, )) R = Mid - ;
  60. else L = Mid + ;
  61. }
  62. printf("%d\n", L);
  63. }

FZYZOJ-1144 恶魔城的更多相关文章

  1. 银行爱“IOE”爱得有多深

    本文由阿尔法工场欧阳长征推荐 导读:如果银行是一家海鲜酒楼,把IBM换掉相当于大搞一次装修,把Oracle换掉相当于把厨子和菜谱全部换掉,把EMC换掉相当于把放食材工具的储物间换个地方.难度在于,这海 ...

  2. SFC游戏列表(维基百科)

    SFC游戏列表 日文名 中文译名 英文版名 发行日期 发行商 スーパーマリオワールド 超级马里奥世界 Super Mario World 1990年11月21日 任天堂 エフゼロ F-Zero F-Z ...

  3. FC红白机游戏列表(维基百科)

    1055个fc游戏列表 日文名 中文译名 英文版名 发行日期 发行商 ドンキーコング 大金刚 Donkey Kong 1983年7月15日 任天堂 ドンキーコングJR. 大金刚Jr. Donkey K ...

  4. [转] [腾讯游戏学院] Roguelike到底是什么?

    如果你是一位资深游戏玩家,那么最近你肯定在哪里看到过 Roguelike 这个词.Roguelike 这个古老的游戏类型现在又变得很潮流,其中各种要素都在不断的被新游戏借鉴.作为一名就是比你有更多空余 ...

  5. POJ 1144

    http://poj.org/problem?id=1144 题意:给你一些点,某些点直接有边,并且是无向边,求有多少个点是割点 割点:就是在图中,去掉一个点,无向图会构成多个子图,这就是割点 Tar ...

  6. ural 1144. The Emperor's Riddle

    1144. The Emperor's Riddle Time limit: 1.0 secondMemory limit: 4 MB Background In the olden times th ...

  7. poj 1144 Network 图的割顶判断模板

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8797   Accepted: 4116 Descripti ...

  8. POJ 1144 Network(Tarjan求割点)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12707   Accepted: 5835 Descript ...

  9. poj 1144 Network(无向图求割顶数)

    题目链接:poj 1144 题意就是说有 n(标号为 1 ~ n)个网点连接成的一个网络,critical places 表示删去后使得图不连通的顶点,也就是割顶,求图中割顶的个数. 直接上大白书上的 ...

随机推荐

  1. JQuery Datatables(二)

    前篇讲到了Datatables的基本用法,链接地址:http://www.cnblogs.com/wumian1360/p/4263129.html 今天来实现5,6,7三点. 其实Datatable ...

  2. ios应用,今年最蛋疼的6月,IPV6!!

    刚刚苹果大会结束,你是不是后悔没去听他的发布会,!!有钱么你? iPV6  国人蒙蔽了,介是什么鬼,经过两三次的残忍拒绝,我认真去研究了iPV6, 2.2 Details We discovered ...

  3. Android开发必备:颜色选择

      AA 指定透明度. 00 是完全透明. FF 是完全不透明.超出取值范围的值将被恢复为默认值.    ffff00 ffff33 ffff66 ffff99 ffffcc ffffff ffcc0 ...

  4. 如何在Sql2008中获取表字段属性和注释?

    如何在Sql2008中获取表字段属性和注释? select b.[value] from sys.columns a left join sys.extended_properties b on a. ...

  5. jsp - 引用 jar包.

    在jsp中使用不同的方式引用jar,准备的工作也不同.我接触过的有两种:1)直接在jsp页面中引用;2)在src下的java类中引用,然后在jsp中调用java类. 1)直接引用:可以将jar包丢到W ...

  6. 在github上搭建博客(使用Jekyll)

    简单说,只需要三步,就可以在 Github 搭建起一个博客: 在 Github 上建一个名为 xxx.github.io 的库: 把看中了的 Jekyll 模板 clone 到本地: 把这个模板 pu ...

  7. ios专题 - 斯坦福大学iOS开发公开课总结

    转自:http://blog.devtang.com/blog/2012/02/05/mvc-in-ios-develop/ 前言 iphone开发相关的教程中最有名的,当数斯坦福大学发布的”ipho ...

  8. LBP特征提取实现

    捯饬了一两天才搞好! 在lbp.m下输入下面代码,运行结果如图: 代码: I=imread('rice.png'); mapping=getmapping(8,'u2'); H1=lbp(I,1,8, ...

  9. [LeetCode OJ] Roman to Integer

    Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...

  10. 子网/ip/子网掩码

    IP地址由网络地址和主机地址组成 而现在IP由“子网掩码”通过子网网络地 址细分出 A,B,C类更小的网络.这种方式 实际上就是将原来的A类,B类,C类等分类 中的的主机地址部分用作子网地址,可以 将 ...