大致题意:
有n座城市和m(1<=n,m<=10)条路。现在要从城市1到城市n。有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱。求的是最少要花多少钱。
注意:路径是有向的。

解题思路:
DFS。这题当有了思路后,做起来是没有难度的,但是思维推算能力要求很高。

这题难点在于“城市与城市之间可能存在多条路径”:
1、 输入数据时可能会出现多条 从城市a到城市b的路径信息,但是费用有所差别;
2、 对于 从城市a到城市b 的同一条路径,允许重复走。

有人会问,重复走同一条路径有什么意义?单纯增加费用而已,为什么不能标记所有路径,每条路只允许走一次,这样费用不是更少么?
我开始也是陷入了这种思维,但是这种想法其实“对一半,错一半”。
先来看一组数据:
6 5
1 2 1 10 10
2 3 4 10 100
2 4 2 15 15
4 1 1 12 12
3 6 6 10 10
如果每条路只允许走一次,那么方案只有1个:
1à2à3à6 共135元
但这组数据的正确答案是67元。为什么?正确的方案如下:
1à2à4à1à2à3à6 共67元
显然1à2重复走了一次,目的是为了先到达城市4,从而使得2à3这段路的费用从100缩减到10元。
转载自:優YoU http://blog.csdn.net/lyy289065406/article/details/6689310

因为就10个点,100条边。
考虑DFS
我们考虑有没有环路的时候不一定非要标记一个点被访问了多少次。
(个人认为这样并不科学)
小優YoU(这应该叫前辈了吧)说:
那么应该重复多少次才合理?这与m值有关。题目的m值范围为<=10,那么当人一个城市被到达的次数若 >3次(不包括3),所走的方案必然出现了环路(网上的同学称之为“闸数”)。因此只需把bool vist[] 修改为 int vist[] 进行标记,本题就能解决了。

但是并没有说出为什么一个点被访问3次就不能更优了,,
所以我认为这是数据水,卡过去的。。

我是把所有的vis设成m,每个点m次,,肯定所有的最优环都包括了。
加个剪枝:if(cost>ans)return;
也是0ms。。。。。

// by SiriusRen
#include <cstdio>
using namespace std;
int n,m,xx,yy,p,r,ans=0x3fffffff,vis[105],P[105],R[105];
int first[15],next[105],v[105],C[105],VIS[105];
void dfs(int x,int cost){VIS[x]++;if(cost>ans)return;if(x==n&&ans>cost)ans=cost;for(int i=first[x];i;i=next[i])if(VIS[v[i]]<=m){if(VIS[C[i]])dfs(v[i],cost+P[i]);else dfs(v[i],cost+R[i]);VIS[v[i]]--;}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d%d%d",&p,&v[i],&C[i],&P[i],&R[i]);next[i]=first[p],first[p]=i;}VIS[1]=1,dfs(1,0);if(ans!=0x3fffffff)printf("%d\n",ans);else puts("impossible");
}

但是还有几个版本莫名其妙AC,,,
1.
统计每个边经过的次数,次数小于等于2。

0msAC

// by SiriusRen
#include <cstdio>
using namespace std;
int n,m,xx,yy,p,r,ans=0x3fffffff,vis[105],P[105],R[105];
int first[15],next[105],v[105],C[105],VIS[105];
void dfs(int x,int cost){if(x==n&&ans>cost)ans=cost;for(int i=first[x];i;i=next[i])if(vis[i]<=1){vis[i]++,VIS[v[i]]++;if(VIS[C[i]])dfs(v[i],cost+P[i]);else dfs(v[i],cost+R[i]);vis[i]--,VIS[v[i]]--;}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d%d%d",&p,&v[i],&C[i],&P[i],&R[i]);next[i]=first[p],first[p]=i;}VIS[1]=1,dfs(1,0);if(ans!=0x3fffffff)printf("%d\n",ans);else puts("impossible");
}

2.统计每个点经过的次数。
次数小于等于3. 这里就不放代码了。。。 网上一抓一大把

乱做实验的后果,,,

POJ 3411 DFS相关推荐

  1. poj 3411(DFS多点访问)

    题意:有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱.求的是最少要花多 ...

  2. A - 棋盘问题 POJ - 1321(dfs)

    A - 棋盘问题 POJ - 1321 dfs 复杂度计算: dfs共进行a步,每步需要循环n次,复杂度为 a^n次方 首先是暴力 an*n,果然炸了 #include<cstdio> # ...

  3. poj 3411 Paid Roads (dfs)

    题目链接 题意:有N个城市被M条道路连接起来了,每两个城市之间可能存在超过一条路,但是城市之间是单向连接的. 每条路是要花费的.每条路的花费可以选择两种方式:1:假如a城市到达b城市,如果之前经过了c ...

  4. poj 3411 1724

    题目:http://poj.org/problem?id=3411 题意:n 个城市,m 条路,每条路都有两种情况的费用,一种是 在 b 城市付费 r,一种是提前在 c 城市付费 p 元,问从 1 到 ...

  5. poj 2531(dfs)

    题目链接:http://poj.org/problem?id=2531 思路:由于N才20,可以dfs爆搞,枚举所有的情况,复杂度为2^(n). 1 #include<iostream> ...

  6. POJ - Hopscotch(DFS)

    题目链接:http://poj.org/problem?id=3050 Time Limit: 1000MS Memory Limit: 65536K Description The cows pla ...

  7. POJ 2458 DFS+判重

    题意: 思路: 搜+判重 嗯搞定 (听说有好多人用7个for写得-.) //By SiriusRen #include <bitset> #include <cstdio>0 ...

  8. POJ 2230 DFS

    题意: Bessie 最近做了农场看守,他每天晚上的工作就是巡视农场并且保证没有坏人破坏农场.从谷仓出发去巡视,并且最终回到谷仓. Bessie 视力不是很好,不能像其他农场的看守一样,对农场的每一条 ...

  9. POJ 3051 DFS

    题意:判断连通块大小 水题 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm ...

最新文章

  1. php date 转换 string_php将时间差转换为字符串提示
  2. LeetCode 295. 数据流的中位数 Hard难度
  3. 原生js封装table表格操作,获取任意行列td,任意单行单列方法
  4. 01-Flutter移动电商实战-项目学习记录
  5. Win7 局域网内访问Sql2005
  6. TokenInsight:BTC新增人气缺乏,多头持仓量持续上升
  7. 配置Sublime Text3和MASM32编译汇编的问题汇总
  8. Redis五大数据类型以及操作---散列表
  9. android studio 顶部导航栏_移动端控件(五)-标签导航(Tabs)和分段控件(Segmented Controls)...
  10. 当供应链金融遇到区块链会擦出怎样的火花?
  11. Oracle安装 卸载干净文档
  12. Java 8新特性(三):Optional类
  13. Zxing 生成条形码(一维码)
  14. numpy矩阵删除一列或一行
  15. msf永恒之蓝漏洞复现及问题解决
  16. 中专计算机应用基础课课程标准,计算机应用基础课程标准
  17. 发票打印JAVA是什么_发票打印方向解决方案
  18. 手把手教你实现一个IAP程序
  19. element 中input 或者 select 清空无用
  20. 传唐骏收购九城股票 联游欲借壳上市

热门文章

  1. upload-labs 全1-21关 附详细解析(文件上传漏洞)
  2. ToB的新思维“MaaS”--管理即服务(Management as a Service)
  3. apdl多荷载步设置
  4. IntelliJ IDEA 的 Win 和 Mac 快捷键大全!
  5. 诺诺电子发票对接 php,诺诺电子发票针对各行业的解决方案
  6. 可持续5G环境下基于机器学习的网络分片框架
  7. 再谈因果性与不确定性
  8. 数学中的 s.t. 含义
  9. 人人都可以是产品经理
  10. 【王道计算机网络】第一章 计算机网络体系结构