HDU 4284 Travel (Folyd预处理+dfs暴搜)
题意:给你一些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暴搜)的更多相关文章
- HDU 4277 USACO ORZ(DFS暴搜+set去重)
原题代号:HDU 4277 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277 原题描述: USACO ORZ Time Limit: 5000/1 ...
- hdu 4277 USACO ORZ (dfs暴搜+hash)
题目大意:有N个木棒,相互组合拼接,能组成多少种不同的三角形. 思路:假设c>=b>=a 然后枚举C,在C的dfs里嵌套枚举B的DFS. #include <iostream> ...
- HDU 4284 Travel
据说是TSP经典问题...可以用状态压缩做.但是看到数据量,就厚着脸皮上搜索了...先floyd预处理每对点间的最小消费,然后只考虑要去的城市就可以了,这样的话城市数最多16个...当时就暴搜了... ...
- 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 ... ...
- hdu4848 DFS 暴搜+ 强剪枝
题意: 给你一个图,然后问你从1出发遍历所有的点的距离和是多少,这里的距离和是每一个点到1的距离的总和,不是选择一条遍历所有点的路径的总长度,时间限制是 8000ms. 思路: ...
- [HDU 5135] Little Zu Chongzhi's Triangles (dfs暴搜)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135 题目大意:给你n条边,选出若干条边,组成若干个三角形,使得面积和最大.输出最大的面积和. 先将边 ...
- hdu 1426:Sudoku Killer(DFS深搜,进阶题目,求数独的解)
Sudoku Killer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 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 ...
- hdu 4284 Travel(floyd + TSP)
虽然题中有n<=100个点,但实际上你必须走过的点只有H<=15个.而且经过任意点但不消耗C[i]跟D[i]可以为无限次,所以可以floyd预处理出H个点的最短路,之后剩下的...就成了裸 ...
随机推荐
- zookeeper原理与实践(一)----zookeeper的基本功能
我们现在围绕两个问题来学习zookeeper: 什么是zookeeper? zookeeper基础知识 什么是zookeeper: zookeeper是hadoop下面的一个子项目,是一个分布式协调服 ...
- ue4 retarge记录
动画重定位(相同骨骼) https://docs.unrealengine.com/latest/CHN/Engine/Animation/AnimationRetargeting/index.htm ...
- 51nod1127(尺取法)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1127 题意:中文题诶- 思路:尺取法 维护一个队列,若当前队 ...
- IT 面试题
1.JDK1.X新增的功能 ==>>> 2.字符流和字节流的区别,使用场景,相关类 ==>>> 字节流与字符流 在Java.io包中操作文件内容的主要有两大 ...
- uoj#401. 【CTSC2018】青蕈领主(分治FFT)
传送门 话说分治\(FFT\)是个啥子啊--还有题目里那字好像念(蕈xùn) 首先考虑无解的情况:区间相交或者\(L_n\neq n\) 这两个都可以感性理解一下 所以区间之间只会有包含关系,我们把每 ...
- 升级了git版本后git clone报ssl错误的解决方法
由于升级了git版本,git clone 的时候报了如下的错误 fatal: unable to access 'https://github.com/open-falcon/falcon-plus. ...
- 4、CreateJS介绍-PreLoadJS
需要在html5文件中引入的CreateJS库文件是preloadjs-0.4.1.min.js HTML5文件如下: <!DOCTYPE html> <html lang=&quo ...
- 6.计算字段 ---SQL
提示:客户端与服务器的格式在SQL语句内可完成的许多转换和格式化工作都可以直接在客户端应用程序内完成.但一般来说,在数据库服务器上完成这些操作比在客户端中完成要快得多. 一.拼接字段 拼接(conca ...
- Django之Form的ModelForm
form与model的终极结合. from django import forms class BookForm(forms.ModelForm): class Meta: model = model ...
- 牛客假日团队赛2 A.买一送一
链接: https://ac.nowcoder.com/acm/contest/924/A 题意: Farmer John在网上买干草.他发现了一笔特殊的买卖.他每买一捆大小为A(1 <= A ...