kuangbin专题四 J 题 POj1511(spfa)(还有一些疑惑)
2017-11-15 22:42
435 查看
kuangbin专题四 J 题 POj1511
Invitation Cards
Description
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
Sample Output
题意:计算从源点到其他点来回的最短路之和
思路:数据较大,spfa正反各跑一次,累计源点到其他点之间的最短路
Invitation Cards
Time Limit: 8000MS | Memory Limit: 262144K | |
Total Submissions: 29590 | Accepted: 9888 |
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
题意:计算从源点到其他点来回的最短路之和
思路:数据较大,spfa正反各跑一次,累计源点到其他点之间的最短路
#include <iostream> #include <cstring> #include <queue> #include <algorithm> #include <cstdio> using namespace std ; //#define LL long long #define maxn 1001000 #define inf (1<<30) int head[2][maxn] , n , m ; bool visit[maxn] ; long long d[maxn] ; struct node { int e , w , next ; }; node edge[2][maxn] ; void spfa(int cap){ int v , i , b ; queue<int>Q ; for(int i=1 ; i<=n ; i++){ d[i] = inf ; visit[i] = false ; } Q.push(1) ; visit[1] = true ; d[1] = 0 ; while(!Q.empty()){ v = Q.front() ; Q.pop() ; visit[v] = false ; for(int i = head[cap][v] ; i != -1 ; i = edge[cap][i].next){ // i 为 边 v->b 的 编号 // 松弛 边 v->b b = edge[cap][i].e ; if(d[b] > d[v] + edge[cap][i].w){ d[b] = d[v] + edge[cap][i].w ; if(!visit[b]){ visit[b] = true ; Q.push(b) ; } } } } return; } int main(){ int t , a , b , c ; scanf("%d" , &t) ; while(t--){ scanf("%d %d" , &n , &m) ; // 边界 for(int i=1 ; i<=n ; i++){ head[0][i] = -1 ; head[1][i] = -1 ; } for(int i=0 ; i<m ; i++){ scanf("%d %d %d" , &a , &b , &c) ; edge[0][i].w = c ; edge[0][i].e = b ; edge[0][i].next = head[0][a] ; head[0][a] = i ; edge[1][i].w = c ; edge[1][i].e = a ; edge[1][i].next = head[1][b] ; head[1][b] = i ; } long long ans = 0 ; spfa(0) ; for(int i=1 ; i<=n ; i++){ ans += d[i] ; } spfa(1) ; for(int i=1 ; i<= n ; i++){ ans += d[i] ; } cout<<ans<<endl ; } return 0 ; }
相关文章推荐
- 【算法系列学习】SPFA邻接表最短路 [kuangbin带你飞]专题四 最短路练习 F - Wormholes
- 关于并发,异步,非阻塞(python)疑惑的一些资料解答
- 解决了对多层结构一些疑惑,整理一下!
- [kuangbin带你飞]专题一 简单搜索 D - Fliptile
- [kuangbin带你飞]专题四 最短路练习 C
- 还有一些收集的ftp资源
- [kuangbin带你飞]专题四 最短路练习-E
- 黑马程序员——面向对象(包与eclipse的使用还有一些API中的类)
- kuangbin专题十 HDU1045(二分图orDFS)
- [kuangbin带你飞]专题一 简单搜索 L HDU 1241
- 图论小结(一)包括一些最短路,最小生成树,差分约束,欧拉回路,的经典题和变种题。强连通,双连通,割点割桥的应用。二分匹配,KM,支配集,独立集,还有2-SAT。
- kuangbin专题十四 POJ2478 欧拉函数模板题
- [kuangbin带你飞]专题七 线段树 H HDU4027
- [kuangbin带你飞]专题一 简单搜索 L - Oil Deposits HDU1241
- [kuangbin带你飞]专题十二 基础DP1 I - 最少拦截系统
- 694 - The Collatz Sequence---关于goto语句的一些反思(还有uva的Runtime Error问题的解决)
- 怎样利用代码与习惯提高网站的并发访问性能以及自己的一些疑惑
- SDRAM中的一些疑惑点
- TOP 1比不加TOP慢的疑惑 我还有疑问
- ios uitableview里点击界面退出键盘的实现和一些疑惑