有一张图,若干人要从不同的点到同一个中间点,再返回,求总费用最小

中间点到各个点最小费用是普通的最短路

各个点到中间点最小费用其实就是将所有路径反向建边之后中间点到各个点的最小费用,同样用最短路就可以求出了

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<queue>
  5. #include<vector>
  6. using namespace std;
  7. typedef pair<int,int> pii;
  8. typedef long long ll;
  9. const int MAXM=;
  10. struct cmp{
  11. bool operator ()(pii a,pii b){
  12. return a.first>b.first;
  13. }
  14. };
  15.  
  16. int head1[MAXM+],point1[MAXM+],val1[MAXM+],next1[MAXM+],size1;
  17. int head2[MAXM+],point2[MAXM+],val2[MAXM+],next2[MAXM+],size2;
  18. int n,m;
  19. int dist1[MAXM+],dist2[MAXM+];
  20.  
  21. void add1(int a,int b,int v){
  22. point1[size1]=b;
  23. val1[size1]=v;
  24. next1[size1]=head1[a];
  25. head1[a]=size1++;
  26. }
  27.  
  28. void add2(int a,int b,int v){
  29. point2[size2]=b;
  30. val2[size2]=v;
  31. next2[size2]=head2[a];
  32. head2[a]=size2++;
  33. }
  34.  
  35. void dij(int s){
  36. int i;
  37. priority_queue<pii,vector<pii>,cmp>q;
  38. memset(dist1,0x3f,sizeof(dist1));
  39. memset(dist2,0x3f,sizeof(dist2));
  40. dist1[s]=dist2[s]=;
  41. q.push(make_pair(dist1[s],s));
  42. while(!q.empty()){
  43. pii u=q.top();
  44. q.pop();
  45. if(u.first>dist1[u.second])continue;
  46. for(i=head1[u.second];~i;i=next1[i]){
  47. int j=point1[i];
  48. if(dist1[j]>dist1[u.second]+val1[i]){
  49. dist1[j]=dist1[u.second]+val1[i];
  50. q.push(make_pair(dist1[j],j));
  51. }
  52. }
  53. }
  54. while(!q.empty())q.pop();
  55. q.push(make_pair(dist2[s],s));
  56. while(!q.empty()){
  57. pii u=q.top();
  58. q.pop();
  59. if(u.first>dist2[u.second])continue;
  60. for(i=head2[u.second];~i;i=next2[i]){
  61. int j=point2[i];
  62. if(dist2[j]>dist2[u.second]+val2[i]){
  63. dist2[j]=dist2[u.second]+val2[i];
  64. q.push(make_pair(dist2[j],j));
  65. }
  66. }
  67. }
  68. ll ans=;
  69. for(i=;i<=n;i++){
  70. ans+=dist1[i];
  71. ans+=dist2[i];
  72. }
  73. printf("%I64d\n",ans);
  74. }
  75.  
  76. int main(){
  77. int t;
  78. scanf("%d",&t);
  79. for(int q=;q<=t;q++){
  80. scanf("%d%d",&n,&m);
  81. int i,a,b,v;
  82. memset(head1,-,sizeof(head1));
  83. size1=;
  84. memset(head2,-,sizeof(head2));
  85. size2=;
  86. for(i=;i<=m;i++){
  87. scanf("%d%d%d",&a,&b,&v);
  88. add1(a,b,v);
  89. add2(b,a,v);
  90. }
  91. dij();
  92. }
  93.  
  94. return ;
  95. }

hdu1535 Invitation Cards 最短路的更多相关文章

  1. HDU1535——Invitation Cards(最短路径:SPAF算法+dijkstra算法)

    Invitation Cards DescriptionIn the age of television, not many people attend theater performances. A ...

  2. poj1511/zoj2008 Invitation Cards(最短路模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Invitation Cards Time Limit: 5 Seconds    ...

  3. HDU 1535 Invitation Cards (最短路)

    题目链接 Problem Description In the age of television, not many people attend theater performances. Anti ...

  4. hdu1535——Invitation Cards

    Invitation Cards Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  5. POJ1511 Invitation Cards —— 最短路spfa

    题目链接:http://poj.org/problem?id=1511 Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Tota ...

  6. POJ-1511 Invitation Cards( 最短路,spfa )

    题目链接:http://poj.org/problem?id=1511 Description In the age of television, not many people attend the ...

  7. J - Invitation Cards 最短路

    In the age of television, not many people attend theater performances. Antique Comedians of Malidine ...

  8. D - Silver Cow Party J - Invitation Cards 最短路

    http://poj.org/problem?id=3268 题目思路: 直接进行暴力,就是先求出举行party的地方到每一个地方的最短路,然后再求以每一个点为源点跑的最短路. 还有一种方法会快很多, ...

  9. Invitation Cards POJ - 1511 (双向单源最短路)

    In the age of television, not many people attend theater performances. Antique Comedians of Malidine ...

随机推荐

  1. datatime 模块

    import datetime # 这个是一个包 里面包含 对时间的处理 对日期的处理datetime.date # 日期相关datetime.time # 时间相关 # 获取当前详细时间print( ...

  2. sqlserver查询父子级关系

    自上向下的查询方法,查询出自身以及所有的子孙数据: --自上往下搜索 ;with maco as ( union all select t.* from ty_Dictionary t,maco m ...

  3. vue-6-事件处理

    <div id="example-2"> <button v-on:click="greet">Greet</button> ...

  4. 服务器由于redis未授权访问漏洞被攻击

    昨天阿里云拦截到了一次异常登陆,改了密码后就没有管他, 今天阿里云给我发消息说我的服务器可能被黑客利用,存在恶意发包行为....... 不过我不打算只是单纯的重置系统,经过一系列的查找原因后,发现被攻 ...

  5. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

  6. Bluedroid: 音频数据的传输流程

    一. UIPC:   Audio Flinger获取到a2dp的hw module,然后蓝牙协议栈有专用于发送和接收media数据的线程,名称:btif_media_task.   蓝牙与Audio的 ...

  7. 1.5 socket服务器传输文件

    socket服务器代码 # -*- coding: utf-8 -*-import sys,os,time,_thread from socket import * host = 'localhost ...

  8. centos7配置mysql

    一:mysql安装方法一:yum安装 下载并安装MySQL官方的 Yum Repository https://dev.mysql.com/ cd ~ wget -i -c https://dev.m ...

  9. Beta阶段冲刺---Day4

    一.Daily Scrum Meeting照片 二.今天冲刺情况反馈 昨天已完成的工作: (1)闯关模式排行榜代码编写: (2)闯关模式结束时的代码编写: (3)闯关模式开始时的代码编写. 今天计划完 ...

  10. kbmMWLog同时输出日志到多个日志管理器

    kbmMWLog日志框架,针对不同的业务情况,提供了多种日志管理器: TkbmMWStreamLogManager TkbmMWLocalFileLogManager TkbmMWSystemLogM ...