poj 3411(DFS多点访问)
题意:有n座城市和m(1<=n,m<=10)条路。现在要从城市1到城市n。有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱。求的是最少要花多少钱。
解题思路:这道题的n与m都很小,dfs可以搞定,但这里与以往的搜索不同,以前dfs每个节点只能够访问一次,这里有多次访问的可能性。很好的是这道题给的是一个有向图,我们只要知道某节点被访问的次数即可,如果访问次数过多,那么肯定是走到了一个环,立即跳出来。。参考了别人的,节点访问次数最多只有3
AC:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int inf = 0x3f3f3f;
struct Edge
{int k,c,p,r,next;
}edge[20];
int n,m,cnt,vis[20],pre[20],ans;void addedge(int a,int b,int c,int p,int r)
{edge[cnt].k = b;edge[cnt].c = c;edge[cnt].p = p;edge[cnt].r = r;edge[cnt].next = pre[a];pre[a] = cnt++;
}void dfs(int cur,int sum)
{if(cur == n){if(ans > sum) ans = sum;return;}if(vis[cur] > 3 || sum > ans) return;vis[cur]++;for(int i = pre[cur]; i != -1; i = edge[i].next){int k = edge[i].k;if(vis[edge[i].c])dfs(k,sum+edge[i].p);else dfs(k,sum+edge[i].r);}vis[cur]--;
}int main()
{while(scanf("%d%d",&n,&m)!=EOF){cnt = 0;memset(pre,-1,sizeof(pre));memset(vis,0,sizeof(vis));for(int i = 1; i <= m; i++){int a,b,c,p,r;scanf("%d%d%d%d%d",&a,&b,&c,&p,&r);addedge(a,b,c,p,r);}ans = inf;dfs(1,0);if(ans != inf)printf("%d\n",ans);else printf("impossible\n");}return 0;
}
poj 3411(DFS多点访问)相关推荐
- POJ 3411 DFS
大致题意: 有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱.求的是最少 ...
- A - 棋盘问题 POJ - 1321(dfs)
A - 棋盘问题 POJ - 1321 dfs 复杂度计算: dfs共进行a步,每步需要循环n次,复杂度为 a^n次方 首先是暴力 an*n,果然炸了 #include<cstdio> # ...
- poj 3411 Paid Roads (dfs)
题目链接 题意:有N个城市被M条道路连接起来了,每两个城市之间可能存在超过一条路,但是城市之间是单向连接的. 每条路是要花费的.每条路的花费可以选择两种方式:1:假如a城市到达b城市,如果之前经过了c ...
- poj 3411 1724
题目:http://poj.org/problem?id=3411 题意:n 个城市,m 条路,每条路都有两种情况的费用,一种是 在 b 城市付费 r,一种是提前在 c 城市付费 p 元,问从 1 到 ...
- poj 2531(dfs)
题目链接:http://poj.org/problem?id=2531 思路:由于N才20,可以dfs爆搞,枚举所有的情况,复杂度为2^(n). 1 #include<iostream> ...
- POJ - Hopscotch(DFS)
题目链接:http://poj.org/problem?id=3050 Time Limit: 1000MS Memory Limit: 65536K Description The cows pla ...
- POJ 2458 DFS+判重
题意: 思路: 搜+判重 嗯搞定 (听说有好多人用7个for写得-.) //By SiriusRen #include <bitset> #include <cstdio>0 ...
- POJ 2230 DFS
题意: Bessie 最近做了农场看守,他每天晚上的工作就是巡视农场并且保证没有坏人破坏农场.从谷仓出发去巡视,并且最终回到谷仓. Bessie 视力不是很好,不能像其他农场的看守一样,对农场的每一条 ...
- POJ 3051 DFS
题意:判断连通块大小 水题 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm ...
最新文章
- java字符串分解 StringTokenizer用法
- oracle怎么删除lob对象,Oracle系列:LOB大对象处理
- echars显示折点数据_数据可视化的基础语法
- 关于推荐的一个算法工程师访谈,有一些内容值得看看
- 如何查看 Linux 中所有正在运行的服务
- 测试连接redis时报错redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket.
- mel加载一个物体不同姿态的模型实现动画效果
- 【设计模式】解释器模式
- springBoot+springSecurity 数据库动态管理用户、角色、权限
- Spring学习(一)Spring简介、SpringIOC
- django jwt token 令牌
- 如何在线免费将MP4转换成MP3格式音乐
- 小心!新媒体环境下,营销传播还有几个大坑!
- wordpress启动_使用Wumblr在WordPress中启动微博
- lcd屏幕有mipi接口吗_液晶屏mipi接口能用的最大分辨率是多少
- 使用jasypt加密解密
- c语言blackjack设计思路,Veriog——简易的BlackJack(21点)程序
- 【转】JSON书写格式
- Centos 7安装Quagga
- c++双人战争小游戏