POJ 1511 Invitation Cards (最短路spfa)
Invitation Cards
题目链接:
http://acm.hust.edu.cn/vjudge/contest/122685#problem/J
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
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
Hint
##题意:
又是求所有点到#1的往返路径和的最小值.
##题解:
跟[POJ3268](http://www.cnblogs.com/Sunshine-tcf/p/5751314.html)的区别在于这个题的数据更大.
所以这里只能用spfa来求.
正反各跑一遍spfa即可. 注意细节.
这里为方便写了两个spfa函数,也可以在一个函数里分别处理正向边和方向边.
##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define eps 1e-8
#define maxn 1000100
#define inf 0x3f3f3f3f3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;
int m,n,k;
LL edges, u[maxn], v[maxn], w[maxn];
LL first[maxn], next[maxn];
LL dis[maxn];
LL edges2, u2[maxn], v2[maxn], w2[maxn];
LL first2[maxn], next2[maxn];
LL dis2[maxn];
void add_edge(LL s, LL t, LL val) {
u[edges] = s; v[edges] = t; w[edges] = val;
next[edges] = first[s];
first[s] = edges++;
}
void add_edge2(LL s, LL t, LL val) {
u2[edges2] = s; v2[edges2] = t; w2[edges2] = val;
next2[edges2] = first2[s];
first2[s] = edges2++;
}
queue q;
bool inq[maxn];
void spfa(int s) {
memset(inq, 0, sizeof(inq));
for(int i=1; i<=n; i++) dis[i] = inf; dis[s] = 0;
while(!q.empty()) q.pop();
q.push(s);
while(!q.empty()) {
int p = q.front(); q.pop();
inq[p] = 0;
for(int e=first[p]; e!=-1; e=next[e]) if(dis[v[e]] > dis[p]+w[e]){
dis[v[e]] = dis[p] + w[e];
if(!inq[v[e]]) {
q.push(v[e]);
inq[v[e]] = 1;
}
}
}
}
void spfa2(int s) {
memset(inq, 0, sizeof(inq));
for(int i=1; i<=n; i++) dis2[i] = inf; dis2[s] = 0;
while(!q.empty()) q.pop();
q.push(s);
while(!q.empty()) {
int p = q.front(); q.pop();
inq[p] = 0;
for(int e=first2[p]; e!=-1; e=next2[e]) if(dis2[v2[e]] > dis2[p]+w2[e]){
dis2[v2[e]] = dis2[p] + w2[e];
if(!inq[v2[e]]) {
q.push(v2[e]);
inq[v2[e]] = 1;
}
}
}
}
int main(int argc, char const *argv[])
{
//IN;
int t; cin >> t;
while(t--)
{
cin >> n >> m;
memset(first, -1, sizeof(first)); edges = 0;
memset(first2, -1, sizeof(first2)); edges2 = 0;
while(m--){
LL u,v,w; scanf("%lld %lld %lld",&u,&v,&w);
add_edge(u,v,w);
add_edge2(v,u,w);
}
spfa(1);
spfa2(1);
LL ans = 0;
for(int i=2; i<=n; i++)
ans += dis[i]+dis2[i];
printf("%lld\n", ans);
}
return 0;
}
POJ 1511 Invitation Cards (最短路spfa)的更多相关文章
- POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))
题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...
- POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)
POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / ...
- POJ1511 Invitation Cards —— 最短路spfa
题目链接:http://poj.org/problem?id=1511 Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Tota ...
- POJ 1511 Invitation Cards (spfa的邻接表)
Invitation Cards Time Limit : 16000/8000ms (Java/Other) Memory Limit : 524288/262144K (Java/Other) ...
- poj 1511 Invitation Cards(最短路中等题)
In the age of television, not many people attend theater performances. Antique Comedians of Malidine ...
- POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 16178 Accepted: 526 ...
- poj 1511 Invitation Cards (最短路)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 33435 Accepted: 111 ...
- Poj 1511 Invitation Cards(spfa)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 24460 Accepted: 8091 De ...
- (简单) POJ 1511 Invitation Cards,SPFA。
Description In the age of television, not many people attend theater performances. Antique Comedians ...
随机推荐
- IOS数据类型
id – 动态对象类型.动态类型和静态类型对象的否定词汇为 nil. Class – 动态类的类型.它的否定词汇为 Nil.SEL – 选择器的数据类型(typedef):这种数据类型代表运行时的一种 ...
- Image.FrameDimensionsList 属性-----具体使用案例
上一篇中说到了图片的具体产生以及属性,本篇主要是具体的使用,详情案例见下面的具体视图及代码 using System;using System.Collections.Generic;using Sy ...
- BZOJ 2326 数学作业(矩阵)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2326 题意:定义Concatenate(1,N)=1234567……n.比如Concat ...
- SecureCRT访问开发板linux系统
前言: 最近在用OK6410开发板跑linux系统,经常在终端上敲一些指令,无奈开发板屏幕太小用起来非常不方便,所以使用终端一款能运行在windows上的软件与开发板连接,直接在电脑上操作开发板了,这 ...
- LA 4127 - The Sky is the Limit (离散化 扫描线 几何模板)
题目链接 非原创 原创地址:http://blog.csdn.net/jingqi814/article/details/26117241 题意:输入n座山的信息(山的横坐标,高度,山底宽度),计算他 ...
- hdu 2372 El Dorado (dp)
题目链接 题意:给n个数字, 求有k个数字的上升子序列有多少种. 思路:d[i][j]表示 以第i个元素为 子序列的最后一个元素,长度为j的子序列 有多少种. 比赛的时候 光想着用组合数做了..... ...
- uva 1642 Magical GCD
很经典的题目,愣是没做出来.. 题意:给出一个序列,求一子序列,满足其GCD(子序列)* length(子序列)最大. 题解: 类似单调队列的思想,每次将前面所得的最大公约数与当前数进行GCD,若GC ...
- fil_space_create
/*******************************************************************//** Creates a space memory obje ...
- 函数fsp_try_extend_data_file
扩展表空间 /***********************************************************************//** Tries to extend t ...
- lrj计算几何模板
整理了一下大白书上的计算几何模板. #include <cstdio> #include <algorithm> #include <cmath> #include ...