题意:

      给你n个城市,m条边,要有h个必须旅游和打工的城市,问你能不能从1把所有必须的h个城市全部旅游并且打工完...

思路:

      先一遍floyd跑出全局最短路,然后暴力枚举出打工的顺序,当打工的个数达到h的时候判断下是否能从第h个打工的点用当前剩余的前回到1如果能就ok..


#include<stdio.h>
#include<string.h> #define inf 1000000000

int
map[100+50][100+50];
int
H[20] ,C[20] ,D[20];
int
HH[20]; int minn(int a ,int b)
{
return
a < b ? a : b;
} void
floyd(int n)
{
for(int
k = 1 ;k <= n ;k ++)
for(int
i = 1 ;i <= n ;i ++)
for(int
j = 1 ;j <= n ;j ++)
map[i][j] = minn(map[i][k] + map[k][j] ,map[i][j]);
} int
mark[20] ,ok ,H_n; void DFS(int s ,int mony ,int sum)
{
if(
sum == H_n && mony >= map[s][1])
{

ok = 1;
return;
}
for(int
i = 1 ;i <= H_n ;i ++)
{
if(
mark[i]) continue;
if(
mony < map[s][H[i]]) continue;
if(
mony - map[s][H[i]] >= D[i] && !ok)
{

mark[i] = 1;
DFS(H[i] ,mony - map[s][H[i]] - D[i] + C[i] ,sum + 1);
mark[i] = 0;
}
}
} int main ()
{
int
i ,j ,m ,n ,mon ,t ,a ,b ,c;
scanf("%d" ,&t);
while(
t--)
{

scanf("%d %d %d" ,&n ,&m ,&mon);
for(
i = 1 ;i <= n ;i ++)
{
for(
j = 1 ;j <= n ;j ++)
map[i][j] = inf;
map[i][i] = 0;
}
for(
i = 1 ;i <= m ;i ++)
{

scanf("%d %d %d" ,&a ,&b ,&c);
map[a][b] = map[b][a] = minn(c ,map[a][b]);
}

floyd(n);
scanf("%d" ,&H_n);
memset(mark ,0 ,sizeof(mark));
for(
i = 1 ;i <= H_n ;i ++)
{

scanf("%d %d %d" ,&H[i] ,&C[i] ,&D[i]);
}

ok = 0;
DFS(1 ,mon ,0);
if(
ok) printf("YES\n");
else
printf("NO\n");
}
return
0;
}

最新文章

  1. 学习 HTML5-页面结构(1)
  2. 如何在Chrome39添加360抢票王插件
  3. 智能设备逆向工程之外部Flash读取与分析篇
  4. Hbase can&#39;t get locations问题
  5. php解压zip文件
  6. jquery 仿手机屏幕切换界面效果
  7. js document对象
  8. freemaker分页模板
  9. 添加samba用户,并设置密码
  10. 使用.net备份和还原数据库
  11. 初识bd时的一些技能小贴士
  12. 提高UI设计效率的4个技巧
  13. javascript嵌套java实现jsp
  14. mysql主从集群配置
  15. faster rcnn源码阅读笔记1
  16. python之socket编写
  17. Codeforces 915 C. Permute Digits (dfs)
  18. EPC摘抄
  19. How to Find Processlist Thread id in gdb !!!!!GDB 使用
  20. Android中Fragment的简单介绍

热门文章

  1. 12. Vue搭建本地服务
  2. 面试被吊打系列 - Redis原理
  3. Celery:小试牛刀
  4. 一个mac软件合集的网站
  5. WPF 基础 - DataTemplate
  6. NIO三大组件之Selector选择器
  7. Codeforces Round #541 F. Asya And Kittens
  8. (一)SpringBoot启动过程的分析-启动流程概览
  9. C#异步编程由浅入深(一)
  10. 利用Navicat premium实现将数据从Oracle导入到MySQL