CJOI 05新年好 (最短路+枚举)
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新年好 (最短路+枚举)相关推荐
- UVALive 6885 Flowery Trails 最短路枚举
题目连接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=129723 题意: 给你一个n点m图的边 1到n有多条最短路 ...
- POJ #1062 昂贵的聘礼 有限制的最短路 枚举+dijkstra求最短路
Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...
- hdu 2363(最短路+枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363 思路:和之前hdu上做过的一题很像...就是先求求出所有的高度差,排序后枚举,每次都一次spfa ...
- codeforces144——D. Missile Silos(最短路+枚举)
codeforces144--D. Missile Silos 原题链接 题意: 给定一个n点m边的无向图,给定起点,求和起点最短距离为l的点有多少个(可以是点也可以在边上) 思路: 首先求一遍最短路 ...
- 05:派之二分加枚举
刚学习了二分搜索就来啦一道没有思路的题 来让我们一起看看吧!!! 描述 我的生日要到了!根据习俗,我需要将一些派分给大家.我有N个不同口味.不同大小的派.有F个朋友会来参加我的派对,每个人会拿到一块派 ...
- [AcWing算法提高课]之图论 单源最短路的综合应用(C++题解)
目录 1)热浪(板子题) (朴素dijkstra) O(n2) (堆优化dijkstra) O((n+m)logm) (spfa) O(m) 2)信使 3)香甜的黄油 4)最小花费 5) 最优乘车 6 ...
- 【图论专题】单源最短路的综合应用
单源最短路径经常与DFS.DP.二分.拓扑排序等算法的结合使用. 题目列表: 题目 算法 AcWing 1135. 新年好 最短路+DFS AcWing 340. 通信线路 二分+双端队列BFS Ac ...
- 最短路计数(dp+最短路)
Description 给出一个 n 个顶点 m 条边的无向无权图,顶点编号为 1 到 n. 问从顶点 1 开始,到其他每个点的最短路有几条. Input 第一行 2 个正整数 n, m ( 1 ≤ ...
- 千万别点进来,点进来你就哭了(最短路,dijkstra)
Description PY利用寒假摸鱼时间去了一趟香港吃吃吃,下面就由我介绍一下我遇到的好吃的香港美食. 首先介绍第一家合益泰小食,这家主打肠粉,这家的肠粉特别的正宗,价格非常亲民,口感非常好 公和 ...
- bzoj4773 负环
Description 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数.保证图中不包含重边和自环. Input 第1 ...
最新文章
- 基于深度神经网络的风电场超短期功率预测系统【数据故事计划最佳学术奖】...
- html5新特性 移除哪些,html5\CSS3有哪些新特性、移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?...
- 易宝典文章——玩转Office 365中的Exchange Online服务 之二 怎样申请一个Office 365企业(试用)账户...
- JZOJ 5952. 【NOIP2018模拟11.5A组】凯旋而归
- linux 网络编程学习
- 看动画学算法系列之:后缀树suffix tree
- web前端性能分析--实践篇
- 时间戳timestamp
- Java 找到并返回一组字符串中第一个不为空的字符串
- 0基础java语法_Java零基础教程(二)基础语法
- NodeSchool: JavaScript函数式编程
- 记一次神奇的sql查询经历,group by慢查询优化(已解决)
- java 中aop 博客园_Java 10.Spring--AOP编程
- python自动化测试-【自动化测试】Python - unittest单元测试框架
- 二极管伏安特性曲线_二极管的温度特性
- pta 机工士姆斯塔迪奥(C语言实现)
- 【基因调控网络】Gene regulatory networks modelling using a dynamic evolutionary hybrid(ENFRN ,动态进化混合模型2010)
- Python免杀脚本生成.exe(过火绒过联想没过360)
- linux 嵌入式 快照_Linux下搭建Cortex-M嵌入式开发环境
- linux桌面显示我的电脑,Windows服务器如何显示”我的电脑”图标 [多种方法详细介绍]...
热门文章
- 华为QoS中CBQ队列详解
- docker之基础命令相关操作上
- hdoj--2546--饭卡
- 获取内网、通过外部网站返回得到内网外部IP (C#/VB.NET)
- [转]在ubuntu下安装sublime text
- [译]反射(Reflection)和动态(dynamic)
- 数据和判定(二)------运算符
- java计算一个日子距离_java计算两地距离(公里)
- mysql sqrt_详解MySQL中的SQRT函数的使用方法
- Unity中 创建射线的两种方法