题目链接

Solution

  DFS+剪枝

  对于一个走过点k,如果有必要再走一次,那么一定是走过k后在k点的最大弹药数增加了.否则一定没有必要再走.

记录经过每个点的最大弹药数,对dfs进行剪枝.

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #include <map>
  6. using namespace std;
  7. map<string, int> pos;
  8. struct Edge {
  9. int v, c, next;
  10. } edge[];
  11. int head[], cnt;
  12. int vis[], amm[], aim[],sum[];
  13. int cs, n, m, ans;
  14. string s, t;
  15.  
  16. void addedge (int u, int v, int c) {
  17. edge[++cnt].v = v, edge[cnt].c = c;
  18. edge[cnt].next = head[u];
  19. head[u] = cnt;
  20. }
  21. void dfs (int x, int s, int k) {
  22. if(k>=ans) return;
  23. if (aim[x]) {
  24. ans = min (ans, k);
  25. return ;
  26. }
  27. if (!vis[x]) s += amm[x], vis[x] = ;
  28. if(vis[x]&&sum[x]>=s) return;
  29. sum[x]=max(sum[x],s);
  30. for (int i = head[x]; i; i = edge[i].next) {
  31. int v = edge[i].v, c = edge[i].c;
  32. if (s >= c) dfs (v, s - c, k + c);
  33. }
  34. vis[x] = ;
  35. }
  36. int main() {
  37. scanf ("%d", &cs);
  38. while (cs--) {
  39. pos.clear();
  40. memset (head, , sizeof head);
  41. memset(sum,,sizeof sum);
  42. memset(vis,,sizeof vis);
  43. cnt = , ans = 0x7fffffff;
  44. scanf ("%d %d", &n, &m);
  45. for (int i = ; i <= n; i++) {
  46. cin >> s;
  47. pos[s] = i;
  48. cin >> amm[i] >> s;
  49. if (s[] == 'y') aim[i] = ;
  50. else aim[i] = ;
  51. }
  52. for (int i = , x; i <= m; i++) {
  53. cin >> s >> t >> x;
  54. int u = pos[s], v = pos[t];
  55. addedge (u, v, x);
  56. addedge (v, u, x);
  57. }
  58. dfs (, , );
  59. if (ans != 0x7fffffff) printf ("%d\n", ans);
  60. else puts ("No safe path");
  61. }
  62. }

LA 6476 Outpost Navigation (DFS+剪枝)的更多相关文章

  1. LA 6450 social advertising(dfs剪枝)

    6450 Social AdvertisingYou have decided to start up a new social networking company. Other existing ...

  2. *HDU1455 DFS剪枝

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  3. POJ 3009 DFS+剪枝

    POJ3009 DFS+剪枝 原题: Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16280 Acce ...

  4. poj 1724:ROADS(DFS + 剪枝)

    ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10777   Accepted: 3961 Descriptio ...

  5. DFS(剪枝) POJ 1011 Sticks

    题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...

  6. DFS+剪枝 HDOJ 5323 Solve this interesting problem

    题目传送门 /* 题意:告诉一个区间[L,R],问根节点的n是多少 DFS+剪枝:父亲节点有四种情况:[l, r + len],[l, r + len - 1],[l - len, r],[l - l ...

  7. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  9. poj 1011 Sticks (DFS+剪枝)

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127771   Accepted: 29926 Descrip ...

随机推荐

  1. Maven学习(3) - Maven和Eclipse集成和构建多模块Maven项目

    最近在工作中越来越经常的用到了Maven作为项目管理和Jar包管理和构建的工具,感觉Maven的确是很好用的.而且要将Maven的功能最大发挥出来,多模块是一个很好的集成例子. 一个Maven项目包括 ...

  2. 【转】XCode、Cocoa、Objective-C 的关系区别

    原文网址:http://blog.sina.com.cn/s/blog_5e89e1ff0100z4k1.html Object-Ciphone开发用的编程语言不是c,c++,java 而是objec ...

  3. C#调用C++动态库(dll)

    在实际软件开发过程中,由于公司使用了多种语言开发,在C#中可能需要实现某个功能,而该功能可能用其他语言已经实现了,那么我们可以调用其他语言写好的模块吗?还有就是,由于C#开发好的项目,我们可以利用re ...

  4. git_share

    linux 环境(192.168.8.58) 1. 生成rsa key $ ssh-keygen 如果你之前没有跑过这个文件, 接受默认选项即可. 这样你会在 ~/.ssh/下看到 id_rsa和id ...

  5. Redis教程01——命令

    APPEND key value追加一个值到key上 AUTH password验证服务器 BGREWRITEAOF 异步重写追加文件 BGSAVE 异步保存数据集到磁盘上 BITCOUNT key ...

  6. hpuoj 1706: 牛B【正向拓扑】【建图】

    1706: 牛B 时间限制: 1 Sec  内存限制: 128 MB提交: 22  解决: 6[提交][状态][讨论版] 题目描述 一群来自日本恐怖分子带着AK47,火箭弹,开着坦克,带着飞机,强行洗 ...

  7. 关于数据库一致改关闭下redo日志文件丢失的处理办法的总结

    数据库一致性关闭下redo日志文件丢失的处理办法(归档和非归档都行) 1. inactive log  在一致性关闭后删除重启时可以在mount下(不丢失数据) alter database clea ...

  8. UVa1151 Buy or Build

    填坑(p.358) 以前天真的以为用prim把n-1条边求出来就可以 现在看来是我想多了 #include<cstdio> #include<cstring> #include ...

  9. JSP ---- 声明、表达式、脚本、注释

    声明 在 JSP 页面中 , 可以声明一个或者多个合法的变量和方法 , 声明后的变量和方法可以在本 JSP 页面的任何位置使用 , 并将在 JSP 页面初始化时被初始化 语法格式如下 : <!% ...

  10. smarty、thinkphp中的html加载其他的html文件的方式

    1.smarty 在模板文件中,使用定界符 {include file="header.html"}  不可以省略.html 2.thinkphp的html文件中 <incl ...