点击打开链接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相关推荐

  1. 【HDU】1535 Invitation Cards 最短路

    传送门:[HDU]1535 Invitation Cards 题目分析:题目真难读......其实题目的意思就是让求从编号为1的点到其他所有点的最短路距离之和加上其他所有点到编号为1的点的最短路距离之 ...

  2. J - Invitation Cards POJ - 1511

    J - Invitation Cards POJ - 1511 题意: 共有 n 个站点,n 个志愿者从1 出发,分别到达不同的站点,晚上全部回到 1 ,求他们总的最小花费是多少? 思路: 首先想到从 ...

  3. Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))

    题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...

  4. POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图

    [题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...

  5. 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)

    题干: In the age of television, not many people attend theater performances. Antique Comedians of Mali ...

  6. Invitation Cards(建反图 + 跑两遍SPFA)

    题目如下: In the age of television, not many people attend theater performances. Antique Comedians of Ma ...

  7. POJ 1511:Invitation Cards

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 26994   Accepted: 895 ...

  8. HDU1535 Invitation Cards(链式前向星+堆优化dijkstra)[C++]

    目录 题目及翻译 题面 输入 输出 输入样例 输出样例 题目思路 注意事项 AC代码 C++ 题目及翻译 题面 In the age of television, not many people at ...

  9. Invitation Cards POJ - 1511【最短路】

    Invitation Cards POJ - 1511 题目 思路:建两张图,一张正向一张反向,先在正向图里求一遍一号点到所有点的距离,再在反向图里求一遍,反向图里一号点到所有点的距离的意思是所有点到 ...

最新文章

  1. 一线互联网Top20高频面试题曝光!
  2. 读书笔记4数据的读入和保存
  3. mysql怎么导出所有的表名称_MYSQL导出表名(navicat 导出表名称)
  4. python零基础能学吗 知乎-Python零基础学习能学好吗?老男孩Python面授班
  5. 计算机网络·“存储-转发”式分组交换网
  6. 使用Vivado保存仿真波形数据并读取
  7. Linux删除带空格的文件 删除最后一个后缀名
  8. 高通似乎成了台积电和三星在先进工艺上暗战主角
  9. Python全栈之路系列之列表数据类型
  10. 登录服务器手机验证码不正确,解决织梦后台登录一直提示验证码不正确的方法...
  11. 如何让“后浪”热爱工作,来自“前浪”的十大拷问
  12. 小白都能学会的Python基础 第一讲:Python初了解
  13. 英语 Yang liang 120 --180
  14. cad角度命令怎么输入_CAD制图软件中怎么输入相对坐标和绝对坐标?
  15. 手写Hashmap第二版
  16. React-Redux 学习,转载
  17. 国际上进行盲源分离研究的主要学者及其研究方向
  18. 8B10B编解码原理与FPGA代码
  19. 【0day RCE】 Horde Groupware Webmail Edition RCE
  20. QT 绘图工具-QCustomPlot

热门文章

  1. SpringSecurity:密码登录与token登录过程理解
  2. 如何使用Erdas进行去霾处理
  3. 拿破仑的滑铁卢与罗斯柴尔德的凯旋门
  4. 小程序源码:花体字转换器-多玩法安装简单
  5. Git系列之修改历史提交信息
  6. 剖析中移动未来之路之二
  7. 韦根读卡电路c语言程序,RFID读卡模块电路图、PCB源文件 125K RFID读卡模块 - 下载 - 搜珍网...
  8. 【AI教程】AI基础学习笔记(第3天)
  9. 做自动化用哪种开发语言,一起【探讨】,谈谈你的想法?
  10. 目前国际上存在的主要安全标准