CJOI 05新年好 (最短路+枚举)

重庆城里有n个车站,m条双向公路连接其中的某些车站。每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费的时间可能不同。在一条路径上花费的时间等于路径上所有公路需要的时间之和。

佳佳的家在车站1,他有五个亲戚,分别住在车站a,b,c,d,e。过年了,他需要从自己的家出发,拜访每个亲戚(顺序任意),给他们送去节日的祝福。怎样走,才需要最少的时间?

输入

 第一行:n(n<=50,000),m(m<=100,000)为车站数目和公路的数目。

第二行:a,b,c,d,e,为五个亲戚所在车站编号(1<a,b,c,d,e<=n)。

以下m行,每行三个整数x,y,t(1<=x,y<=n,1<=t<=100),为公路连接的两个车站编号和时间。

输出

 仅一行,包含一个整数T,为最少的总时间

样例输入

6  6

2  3  4  5  6

1  2  8

2  3  3

3  4  4

4  5  5

5  6  2

1  6  7

样例输出

21

解题报告

必须经过a,b,c,d,e这几个点,故我们必须知道包括起点在内的6个点的最短路。所以跑6遍堆优dijkstra。最后再对a,b,c,d,e的顺序进行全排列,计算结果取最小即可。

复杂度O(6*nlogn)

#include<bits/stdc++.h>
#define Pair pair<int,int>
#define MAXN 70000+10
#define MAXM 200000+10
using namespace std;
struct Edge{int next,to,dis;
}edge[MAXM];
int n,m,num,v[MAXN],dis[MAXN],head[MAXN];
int disi[9][MAXN],u[MAXN],ans=99999999,a[8],b[8];
int temp=0;
void add(int from,int to,int dis)
{edge[++num].next=head[from];edge[num].to=to;edge[num].dis=dis;head[from]=num;
}
void dij(int s)
{memset(v,0,sizeof(v));priority_queue<Pair,vector<Pair>,greater<Pair> > h;for(int i=1;i<=n;i++) disi[s][i]=99999999;disi[s][u[s]]=0;h.push(Pair(0,u[s]));while(h.size()>0){int k=h.top().second;h.pop();if(v[k]) continue;v[k]=1;for(int i=head[k];i;i=edge[i].next)if(disi[s][edge[i].to]>disi[s][k]+edge[i].dis){disi[s][edge[i].to]=disi[s][k]+edge[i].dis;h.push(Pair(disi[s][edge[i].to],edge[i].to));}}
}
void dfs(int x)
{for(int i=1;i<=5;i++)if(!b[i]){b[i]=1;a[x]=i;if(x==5){temp=0;for(int i=0;i<5;i++)temp+=disi[a[i]][u[a[i+1]]];ans=min(ans,temp);temp=0;}else dfs(x+1);b[i]=0;a[x]=0;}
}
int main()
{freopen("newyear.in","r",stdin);freopen("newyear.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=5;i++)scanf("%d",&u[i]);for(int i=1;i<=m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);add(x,y,z);add(y,x,z);}u[0]=1;for(int i=0;i<=5;i++)dij(i);a[0]=0;dfs(1);printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/yangyaojia/p/6346493.html

CJOI 05新年好 (最短路+枚举)相关推荐

  1. UVALive 6885 Flowery Trails 最短路枚举

    题目连接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=129723 题意: 给你一个n点m图的边 1到n有多条最短路 ...

  2. POJ #1062 昂贵的聘礼 有限制的最短路 枚举+dijkstra求最短路

    Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...

  3. hdu 2363(最短路+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363 思路:和之前hdu上做过的一题很像...就是先求求出所有的高度差,排序后枚举,每次都一次spfa ...

  4. codeforces144——D. Missile Silos(最短路+枚举)

    codeforces144--D. Missile Silos 原题链接 题意: 给定一个n点m边的无向图,给定起点,求和起点最短距离为l的点有多少个(可以是点也可以在边上) 思路: 首先求一遍最短路 ...

  5. 05:派之二分加枚举

    刚学习了二分搜索就来啦一道没有思路的题 来让我们一起看看吧!!! 描述 我的生日要到了!根据习俗,我需要将一些派分给大家.我有N个不同口味.不同大小的派.有F个朋友会来参加我的派对,每个人会拿到一块派 ...

  6. [AcWing算法提高课]之图论 单源最短路的综合应用(C++题解)

    目录 1)热浪(板子题) (朴素dijkstra) O(n2) (堆优化dijkstra) O((n+m)logm) (spfa) O(m) 2)信使 3)香甜的黄油 4)最小花费 5) 最优乘车 6 ...

  7. 【图论专题】单源最短路的综合应用

    单源最短路径经常与DFS.DP.二分.拓扑排序等算法的结合使用. 题目列表: 题目 算法 AcWing 1135. 新年好 最短路+DFS AcWing 340. 通信线路 二分+双端队列BFS Ac ...

  8. 最短路计数(dp+最短路)

    Description 给出一个 n 个顶点 m 条边的无向无权图,顶点编号为 1 到 n. 问从顶点 1 开始,到其他每个点的最短路有几条. Input 第一行 2 个正整数 n, m  ( 1 ≤ ...

  9. 千万别点进来,点进来你就哭了(最短路,dijkstra)

    Description PY利用寒假摸鱼时间去了一趟香港吃吃吃,下面就由我介绍一下我遇到的好吃的香港美食. 首先介绍第一家合益泰小食,这家主打肠粉,这家的肠粉特别的正宗,价格非常亲民,口感非常好 公和 ...

  10. bzoj4773 负环

    Description 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数.保证图中不包含重边和自环. Input 第1 ...

最新文章

  1. 基于深度神经网络的风电场超短期功率预测系统【数据故事计划最佳学术奖】...
  2. html5新特性 移除哪些,html5\CSS3有哪些新特性、移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?...
  3. 易宝典文章——玩转Office 365中的Exchange Online服务 之二 怎样申请一个Office 365企业(试用)账户...
  4. JZOJ 5952. 【NOIP2018模拟11.5A组】凯旋而归
  5. linux 网络编程学习
  6. 看动画学算法系列之:后缀树suffix tree
  7. web前端性能分析--实践篇
  8. 时间戳timestamp
  9. Java 找到并返回一组字符串中第一个不为空的字符串
  10. 0基础java语法_Java零基础教程(二)基础语法
  11. NodeSchool: JavaScript函数式编程
  12. 记一次神奇的sql查询经历,group by慢查询优化(已解决)
  13. java 中aop 博客园_Java 10.Spring--AOP编程
  14. python自动化测试-【自动化测试】Python - unittest单元测试框架
  15. 二极管伏安特性曲线_二极管的温度特性
  16. pta 机工士姆斯塔迪奥(C语言实现)
  17. 【基因调控网络】Gene regulatory networks modelling using a dynamic evolutionary hybrid(ENFRN ,动态进化混合模型2010)
  18. Python免杀脚本生成.exe(过火绒过联想没过360)
  19. linux 嵌入式 快照_Linux下搭建Cortex-M嵌入式开发环境
  20. linux桌面显示我的电脑,Windows服务器如何显示”我的电脑”图标 [多种方法详细介绍]...

热门文章

  1. 华为QoS中CBQ队列详解
  2. docker之基础命令相关操作上
  3. hdoj--2546--饭卡
  4. 获取内网、通过外部网站返回得到内网外部IP (C#/VB.NET)
  5. [转]在ubuntu下安装sublime text
  6. [译]反射(Reflection)和动态(dynamic)
  7. 数据和判定(二)------运算符
  8. java计算一个日子距离_java计算两地距离(公里)
  9. mysql sqrt_详解MySQL中的SQRT函数的使用方法
  10. Unity中 创建射线的两种方法