题干:

In the age of television, not many people attend theater performances. Antique Comedians of Malidinesia are aware of this fact. They want to propagate theater and, most of all, Antique Comedies. They have printed invitation cards with all the necessary information and with the programme. A lot of students were hired to distribute these invitations among the people. Each student volunteer has assigned exactly one bus stop and he or she stays there the whole day and gives invitation to people travelling by bus. A special course was taken where students learned how to influence people and what is the difference between influencing and robbery. 
The transport system is very special: all lines are unidirectional and connect exactly two stops. Buses leave the originating stop with passangers each half an hour. After reaching the destination stop they return empty to the originating stop, where they wait until the next full half an hour, e.g. X:00 or X:30, where 'X' denotes the hour. The fee for transport between two stops is given by special tables and is payable on the spot. The lines are planned in such a way, that each round trip (i.e. a journey starting and finishing at the same stop) passes through a Central Checkpoint Stop (CCS) where each passenger has to pass a thorough check including body scan.

All the ACM student members leave the CCS each morning. Each volunteer is to move to one predetermined stop to invite passengers. There are as many volunteers as stops. At the end of the day, all students travel back to CCS. You are to write a computer program that helps ACM to minimize the amount of money to pay every day for the transport of their employees.

Input

The input consists of N cases. The first line of the input contains only positive integer N. Then follow the cases. Each case begins with a line containing exactly two integers P and Q, 1 <= P,Q <= 1000000. P is the number of stops including CCS and Q the number of bus lines. Then there are Q lines, each describing one bus line. Each of the lines contains exactly three numbers - the originating stop, the destination stop and the price. The CCS is designated by number 1. Prices are positive integers the sum of which is smaller than 1000000000. You can also assume it is always possible to get from any stop to any other stop.

Output

For each case, print one line containing the minimum amount of money to be paid each day by ACM for the travel costs of its volunteers.

Sample Input

2
2 2
1 2 13
2 1 33
4 6
1 2 10
2 1 60
1 3 20
3 4 10
2 4 5
4 1 50

Sample Output

46
210

解题报告:

就是题目比较难懂啊。。。大概意思是一群人白天从CCS(一号顶点)出发前往各个点,然后晚上再从各个点回到CCS,问你最小花费是多少。不知道题干扯了这么多没用的是干嘛。。。直接正反跑两遍DIjkstra就可以。

AC代码:

#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int MAX = 1000000 + 5;
int n,m;
int cnt;
int a[MAX],b[MAX];
int head[MAX];
bool vis[MAX];
ll c[MAX],dis1[MAX],dis2[MAX];
struct Edge {int to;ll w;int ne;
} e[MAX];
struct Point {int pos;ll c;Point(){}Point(int pos,int c):pos(pos),c(c){};bool operator < (const Point b) const {return c>b.c;}
};
void Dijkstra(ll dis[]) {memset(vis,0,sizeof(vis));for(int i = 1; i<=n; i++) dis[i] = 9999999999;dis[1] = 0;priority_queue<Point> pq;Point cur = Point(1,0);pq.push(cur);while(!pq.empty()) {cur = pq.top();pq.pop();vis[cur.c] = 1;for(int i = head[cur.pos]; i!=-1; i=e[i].ne) {if(/*!vis[e[i].to] &&*/ dis[e[i].to] > dis[cur.pos] + e[i].w) {dis[e[i].to ] = dis[cur.pos ] + e[i].w;pq.push(Point(e[i].to,dis[e[i].to ]) );}}}}
void init() {memset(vis,0,sizeof(vis));memset(head ,-1,sizeof(head));cnt = 0;
}
void add(int u,int v,int w) {e[cnt].to = v;e[cnt].w = w;e[cnt].ne = head[u];head[u] = cnt++;
}
int main()
{int t;cin>>t;while(t--) {init();scanf("%d%d",&n,&m);for(int i = 1; i<=m; i++) {scanf("%d%d%lld",&a[i],&b[i],&c[i]);add(a[i],b[i],c[i]);}//       cout<<"jintu1111"<<endl;Dijkstra(dis1);//       cout<<"jintu1111"<<endl;//第两遍初始化init();for(int i = 1; i<=m; i++) {add(b[i],a[i],c[i] );}//      cout<<"jintu2222"<<endl;Dijkstra(dis2);//      cout<<"jintu2222"<<endl;ll sum = 0;for(int i = 1; i<=n; i++) {sum +=dis1[i]+dis2[i];}printf("%lld\n",sum);}return 0 ;
}

总结:

head别初始化成0了。。。dis别忘初始化,,这里是longlong类型所以初始化成9999999999就行。。。显然这题要用longlong啊看看数据范围就知道了。

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

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

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

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

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

  3. POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图

    题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...

  4. AcWing 1137. Choose the best route(朴素dijkstra反向建图 or 虚拟源点法)

    题目比较简单,讲两种做法 法一.二都是用的朴素dijkstra算法 法一:反向建图 求终点s到每个起点的最短距离 O(T * (n^2 + n))(T表示多组测试数据)820ms #include & ...

  5. POJ 1511 Invitation Cards(最短路径,dijkstra 模板题)

    题目意思: 在有向图中,求1到所有点的最短路之和 + 所有点到1的最短路之和. 本题要点: 1.先求1点 到其他点的单源最短路径 d[i](1 <= i <= n), 用 dijkstra ...

  6. POJ 1511 Invitation Cards(双向最短路)

    [题目链接] http://poj.org/problem?id=1511 题目意思 给n个点,m条有向边.问你从1到其他n-1各点的最短路和加上从n-1各点到1的最短路. 解题思路 因为是有向边而且 ...

  7. poj 1511 Invitation Cards

    最短路 题意:  强调是有向图 , n个点(1到n标号)m条边,求出点1到所有点的最短路之和 + 所有点到点1的最短路之和 什么?求一次最短路,然后 x 2 就是答案? 这样是错的,如果是无向图的话可 ...

  8. AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)

    题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...

  9. CF-346 D. Robot Control(反向建图spfa)

    CF-346 D. Robot Control(反向建图spfa) 题目链接 题意 有向图(有环)中有一个机器人,机器人有三种规则: 重复访问同一个点会自我销毁 无路可走会自我销毁 多岔路口会随机选择 ...

最新文章

  1. MATLAB_8-边缘检测_大长腿干扰下识别人脸
  2. 自我评价中专计算机600作文,自我评价作文600字
  3. 企业微信的corpsecret在哪里?
  4. 互联网协议IP抓包分析 -- wireshark
  5. 计算机三级网络技术大题多少分,2017年计算机三级网络技术考前试题及答案(3)...
  6. mysql中SQL查询优化方法总结
  7. python爬取elasticsearch内容
  8. JavaScript + Audio API自制简易音乐播放器(详细完整版、小白都能看懂)
  9. linux的常用操作——read函数和write函数
  10. mysql误删除数据恢复_mysql误删除数据恢复
  11. 数据脱敏(Data Masking)学习
  12. 贝加莱工控机维修主板维修5PC600.SX01-00常见故障排查
  13. [bzoj4084][Sdoi2015]双旋转字符串_hash
  14. hive java.net.SocketTimeoutException: Read timed out 问题解
  15. 有什么靠谱的Python培训机构
  16. 在html 中插入优酷视频
  17. YT88 USB 加密狗 使用方法(二)加密算法
  18. MFC单项选择题标准化考试系统
  19. matlab曲线绘制——初学者入门
  20. 国外毕业论文写作论证方面如何做好?

热门文章

  1. 服务器水厂物资管理系统,水处理管理系统及水处理管理服务器 Water management systems and water treatment management server...
  2. 华为做raid5步骤_华为验厂验厂流程如何?主要内容是什么呢?
  3. python卸载opencv_20.Windows python,opencv的安装与卸载
  4. md5与des算法有何不同_到底AI芯片和传统芯片有何区别?
  5. uci数据集_数据分析找不到数据集?快来看这个盘点
  6. P2678 [NOIP2015 提高组] 跳石头
  7. threejs骨架形状
  8. 模拟退火算法(代码可直接运行)
  9. python接口自动化测试框架实战从设计到开发_Python接口自动化测试框架实战 从设计到开发...
  10. bin文件怎么转换成文本文档_怎么把pdf文件转换成word文档?这样转很简单