hdu 1535 Invitation Cards
点击打开链接hdu1535
思路:最短路+SPFA
分析:
1 题目要求的是总的最小的花费,意思就是要求每一个人的花费都最小。
2 由于每一个人都是从1出去,最后还是都要回到1的,那么求解的时候就要分成两部分“出去+回来”;出去的话直接利用SPFA(1),1作为起点即可求出每一点的最小花费,回来的话如果是直接利用对每一个人进行SPFA,那么这样肯定超时。仔细想想要求的是每一个点到1的最小距离,那么由于给定的是一个有向图,那么只要重新建图把边反向,那么我们所求的问题就变成1到每一个点的最小距离。所以只要两步SPFA(1)即可。
3 数据类型为long long
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define MAXN 1000010
#define INF 0x7FFFFFFFint t , n , m;
long long ans;
int first[MAXN] , next[MAXN];
int star[MAXN] , end[MAXN];
long long value[MAXN];
long long dis[MAXN];
long long tmp[MAXN];
int vis[MAXN];
queue<int>q;/*初始化*/
void init(){memset(first , -1 , sizeof(first));memset(next , -1 , sizeof(next));
}/*SPFA函数*/
void SPFA(int s){memset(vis , 0 , sizeof(vis));for(int i = 1 ; i <= n ; i++)dis[i] = INF;dis[s] = 0;vis[s] = 1;q.push(s);while(!q.empty()){int x = q.front();q.pop();vis[x] = 0;for(int i = first[x] ; i != -1 ; i = next[i]){if(dis[end[i]] > dis[x] + value[i]){dis[end[i]] = dis[x] + value[i];if(!vis[end[i]]){vis[end[i]] = 1;q.push(end[i]);}}}}
}int main(){int a , b; scanf("%d" , &t);while(t--){scanf("%d%d" , &n , &m);/*第一次建图*/init();for(int i = 0 ; i < m ; i++){scanf("%d%d%lld" , &star[i] , &end[i] , &value[i]);next[i] = first[star[i]];first[star[i]] = i;}ans = 0;SPFA(1);memcpy(tmp , dis , sizeof(tmp));/*把ans保存在tmp数组*//*第二次建图*/init();for(int i = 0 ; i < m ; i++){a = star[i];b = end[i];star[i] = b;end[i] = a;next[i] = first[star[i]];first[star[i]] = i;}SPFA(1);/*求总和*/for(int i = 2 ; i <= n ; i++)ans += tmp[i]+dis[i];printf("%lld\n" , ans);}return 0;
}
hdu 1535 Invitation Cards相关推荐
- 【HDU】1535 Invitation Cards 最短路
传送门:[HDU]1535 Invitation Cards 题目分析:题目真难读......其实题目的意思就是让求从编号为1的点到其他所有点的最短路距离之和加上其他所有点到编号为1的点的最短路距离之 ...
- J - Invitation Cards POJ - 1511
J - Invitation Cards POJ - 1511 题意: 共有 n 个站点,n 个志愿者从1 出发,分别到达不同的站点,晚上全部回到 1 ,求他们总的最小花费是多少? 思路: 首先想到从 ...
- Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))
题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...
- POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图
[题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...
- 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)
题干: In the age of television, not many people attend theater performances. Antique Comedians of Mali ...
- Invitation Cards(建反图 + 跑两遍SPFA)
题目如下: In the age of television, not many people attend theater performances. Antique Comedians of Ma ...
- POJ 1511:Invitation Cards
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 26994 Accepted: 895 ...
- HDU1535 Invitation Cards(链式前向星+堆优化dijkstra)[C++]
目录 题目及翻译 题面 输入 输出 输入样例 输出样例 题目思路 注意事项 AC代码 C++ 题目及翻译 题面 In the age of television, not many people at ...
- Invitation Cards POJ - 1511【最短路】
Invitation Cards POJ - 1511 题目 思路:建两张图,一张正向一张反向,先在正向图里求一遍一号点到所有点的距离,再在反向图里求一遍,反向图里一号点到所有点的距离的意思是所有点到 ...
最新文章
- 一线互联网Top20高频面试题曝光!
- 读书笔记4数据的读入和保存
- mysql怎么导出所有的表名称_MYSQL导出表名(navicat 导出表名称)
- python零基础能学吗 知乎-Python零基础学习能学好吗?老男孩Python面授班
- 计算机网络·“存储-转发”式分组交换网
- 使用Vivado保存仿真波形数据并读取
- Linux删除带空格的文件 删除最后一个后缀名
- 高通似乎成了台积电和三星在先进工艺上暗战主角
- Python全栈之路系列之列表数据类型
- 登录服务器手机验证码不正确,解决织梦后台登录一直提示验证码不正确的方法...
- 如何让“后浪”热爱工作,来自“前浪”的十大拷问
- 小白都能学会的Python基础 第一讲:Python初了解
- 英语 Yang liang 120 --180
- cad角度命令怎么输入_CAD制图软件中怎么输入相对坐标和绝对坐标?
- 手写Hashmap第二版
- React-Redux 学习,转载
- 国际上进行盲源分离研究的主要学者及其研究方向
- 8B10B编解码原理与FPGA代码
- 【0day RCE】 Horde Groupware Webmail Edition RCE
- QT 绘图工具-QCustomPlot