题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它。一个人从1号点出发,给出初始金钱,问你能不能访问所以的点,并且获得所以证书。

题解:目标是那些一定要访问的点,怎么到达的我们不关心,但是我们关心花费最少的路径,而且到达那个点后是一定要打工的,如果只是经过,那么在求花费最少的路径的时候已经考虑过了。

因此先用Folyd求出各个点直接的最短路径,由于N很小,又只要求出一个解,所以直接dfs暴搜就行了。

M很大,可能有重边。注意处理。

当时一看,图论题,没仔细想就跳过了。下面的代码加了输入挂,因为第一遍写T了,以为是输入问题,所以加上了。改了我好几个小时没过,重写一遍就过了。

#define HDU
#ifndef HDU
#include<bits/stdc++.h>
#else
//pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
//#include<iostream>
#endif // HDU
#define mins(s,x) if((x)<(s)) s = x
#define maxs(s,x) if((x)>(s)) s = x
using namespace std;
typedef long double ld;
typedef long long ll; const int maxn = ;
const int maxh = ;
const int INF = 0x3f3f3f3f; int N,M,Mon,H;
int dis[maxn][maxn];
inline void scan_d(int &ret)
{
char c;ret=;
while((c=getchar())<''||c>'');
while(c>=''&&c<='') ret=ret*+(c-''),c=getchar();
} struct City
{
int cost,earn,id;
void input(){
scanf("%d%d%d",&id,&earn,&cost);
}
}city[maxh]; bool vis[maxh]; bool dfs(int u,int money,int cnt)
{
if( cnt == H && money >= dis[u][] )return true;
for(int i = ; i < H; i++) if(!vis[i]){
int v = city[i].id;
if( money >= dis[u][v]+city[i].cost ){
vis[i] = ;
if(dfs(v,money-dis[u][v]-city[i].cost+city[i].earn,cnt+)) return true;
vis[i] = ;
}
}
return false;
} void init()
{
memset(vis,false,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
for(int i = ; i <= N; i++)
dis[i][i]= ;
} //#define local int main()
{
#ifdef local
freopen("in.txt","r",stdin);
// freopen("myout.txt","w",stdout);
#endif // local
int T;
scan_d(T);
//scanf("%d",&T);
while(T--){
scan_d(N);scan_d(M);scan_d(Mon);
//scanf("%d%d%d",&N,&M,&Mon);
init();
for(int i = ; i < M; i++){
int u,v,w;
scan_d(u);scan_d(v);scan_d(w);
//scanf("%d%d%d",&u,&v,&w);
//if(u == v) continue;
if(dis[u][v]>w) {
dis[u][v] = w;
dis[v][u] = dis[u][v];
} } for(int k = ; k <= N; k++)
for(int i = ; i <= N; i++){
if(dis[i][k]<INF)
for(int j = ; j <= N; j++) {
mins(dis[i][j],dis[i][k]+dis[k][j]);
}
} scanf("%d",&H);
for(int i = ; i < H; i++){
city[i].input();
} printf("%s\n",dfs(,Mon,)?"YES":"NO");
} return ;
}

HDU 4284 Travel (Folyd预处理+dfs暴搜)的更多相关文章

  1. HDU 4277 USACO ORZ(DFS暴搜+set去重)

    原题代号:HDU 4277 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277 原题描述: USACO ORZ Time Limit: 5000/1 ...

  2. hdu 4277 USACO ORZ (dfs暴搜+hash)

    题目大意:有N个木棒,相互组合拼接,能组成多少种不同的三角形. 思路:假设c>=b>=a 然后枚举C,在C的dfs里嵌套枚举B的DFS. #include <iostream> ...

  3. HDU 4284 Travel

    据说是TSP经典问题...可以用状态压缩做.但是看到数据量,就厚着脸皮上搜索了...先floyd预处理每对点间的最小消费,然后只考虑要去的城市就可以了,这样的话城市数最多16个...当时就暴搜了... ...

  4. Usaco 2.3 Zero Sums(回溯DFS)--暴搜

    Zero SumConsider the sequence of digits from 1 through N (where N=9) in increasing order: 1 2 3 ... ...

  5. hdu4848 DFS 暴搜+ 强剪枝

    题意:       给你一个图,然后问你从1出发遍历所有的点的距离和是多少,这里的距离和是每一个点到1的距离的总和,不是选择一条遍历所有点的路径的总长度,时间限制是 8000ms. 思路:       ...

  6. [HDU 5135] Little Zu Chongzhi's Triangles (dfs暴搜)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135 题目大意:给你n条边,选出若干条边,组成若干个三角形,使得面积和最大.输出最大的面积和. 先将边 ...

  7. hdu 1426:Sudoku Killer(DFS深搜,进阶题目,求数独的解)

    Sudoku Killer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. HDU - 4284 Travel(floyd+状压dp)

    Travel PP loves travel. Her dream is to travel around country A which consists of N cities and M roa ...

  9. hdu 4284 Travel(floyd + TSP)

    虽然题中有n<=100个点,但实际上你必须走过的点只有H<=15个.而且经过任意点但不消耗C[i]跟D[i]可以为无限次,所以可以floyd预处理出H个点的最短路,之后剩下的...就成了裸 ...

随机推荐

  1. Redis使用的相关问题

    Redis用那些数据结构? 字符串类型String 字典Hash 列表List 集合Set 有序集合SortedSet HyperLogLog.Geo.Pub/Sub Redis Module.Blo ...

  2. 设置Mvc路由Asp.net 与 mvc同用

    App_start/RouteConfig.cs/RegisterRoutes(RouteConllection routes) { routes.IgnoreRoute("{resourc ...

  3. Git 分支管理 解决冲突

    人生不如意之事十之八九,合并分支往往也不是一帆风顺的. 准备新的feature1分支,继续我们的新分支开发: $ git checkout -b feature1 -- 在feature1分支上修改r ...

  4. 以太坊开发教程(一) truffle框架简介/安装/使用

    通常一个DAPP的开发包括两部分:智能合约的开发和提供合约进行调用的前端页面. truffle提供了对这两部分内容比较简单的开发方式,特别是在开发/测试阶段.给开发人员提供快捷的打包/部署,已经本地服 ...

  5. Node.js 内置模块crypto加密模块(5) RSA

    RSA加密算法 写在前面: 了解RSA算法的原理请查看下面的文章 一文搞懂 RSA 算法 来源:简书  作者:somenzz 在使用 Node 进行 RSA 加密之前我们首先需要获取RSA公共和私有密 ...

  6. Python学习笔记(迭代,列表解析,生成器)

    迭代(iterable):支持每次返回自己所包含一个对象的 iter()得到迭代器,.next()遍历列表. 列表解析:根据已有列表高效生成列表的方式. 生成器(Generator): 通过列表生成式 ...

  7. 笔记-迎难而上之Java基础进阶2

    Set集合 import java.util.*; public class HashSetDemo{ public static void main(String[] args){ //Set接口的 ...

  8. Jmeter集成Jira提交缺陷

    笔者曾在文章<Jmeter排忧解难—生成excel结果文件>聊到了一种提高接口测试效率的方法.今天,咱们接着对“提高接口测试效率”这个话题做更深入的探讨.作为一名接口测试人员,我们是否一直 ...

  9. Jmeter 的 vars 和 props 用法

    meter 的 JSR223 控件是 代替 BeanShell 的新一代脚本控件,支持多种脚本语言,尤其是其中的 Groovy,更是重点推荐使用的脚本语言,本文研究其中的 vars 和 props 两 ...

  10. guacamole的复制粘贴

    一.发送中文或文本(针对开发环境,生产环境不需变动) 官方下载的完整版js缺失了一部分关于粘贴板的代码,调用setclipboard方法,将外部内容复制到粘贴板的时候,提示方法不存在.需要补齐这部分源 ...