原题:

Invitation Cards
Time Limit: 8000MS   Memory Limit: 262144K
Total Submissions: 31230   Accepted: 10366

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

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

题目大意:输入一个有向图,从1到除1以外所有的点,再从那些点回到1之后的费用(即路上权)的相加总和。

思路:从点1到其他点就是最典型的单源点最短路径问题,又因为最多会有1000000个点和1000000条边,因此采用SPFA无疑是最好的选择。然后考虑从其他点回到1点,这里只要将图中所有的边反向,然后再求一遍点1到其他点的费用和,最后相加两次的费用和即可。

注意点:因为点很多,所以不用邻接矩阵储存图,而用邻接表储存图。

AC代码:

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
int q,n,m;
int u1[],v1[],w1[],first1[],next1[];
int u2[],v2[],first2[],next2[];
int dis[],t[];
bool e[];
int temp;
int tmp;
int head,tail;
long long ans1,ans2;
int main(){
int i,j; scanf("%d",&q);
for(j=;j<=q;j++){
scanf("%d%d",&n,&m); for(i=;i<=n;i++){ //图的邻接表储存
first1[i]=-;
first2[i]=-;
}
for(i=;i<=m;i++){ //分别储存两种,一个是反向后的图
scanf("%d%d%d",&u1[i],&v1[i],&w1[i]);
next1[i]=first1[u1[i]];
first1[u1[i]]=i; v2[i]=u1[i];
u2[i]=v1[i]; next2[i]=first2[u2[i]];
first2[u2[i]]=i;
} for(i=;i<=n;i++) //SPFA初始化
dis[i]=0x7fffffff;
dis[]=;
memset(e,false,sizeof(e));
e[]=true;
t[]=;
head=;
tail=; while(head!=tail){
head=(head+)%; //头指针下移
temp=t[head]; //temp为队首元素,是一个点
e[temp]=false; //队列首个元素出队
tmp=first1[temp]; //tmp表示以temp为起点的并且在邻接表中的第一条边
while(tmp!=-){ //枚举与temp相连的点
if(dis[v1[tmp]]>dis[temp]+w1[tmp]){
dis[v1[tmp]]=dis[temp]+w1[tmp]; //修改
if(!e[v1[tmp]]){
e[v1[tmp]]=true; //新元素入列
tail=(tail+)%; //队尾指针下移
t[tail]=v1[tmp];
}
}
tmp=next1[tmp]; //找其他以temp为起点的边,在邻接表中找
} }
ans1=; //求和
for(i=;i<=n;i++)
ans1+=dis[i]; //下同 for(i=;i<=n;i++)
dis[i]=0x7fffffff;
for(i=;i<=;i++) //队列清空
t[i]=;
dis[]=;
memset(e,false,sizeof(e));
e[]=true;
t[]=;
head=;
tail=; while(head!=tail){
head=(head+)%;
temp=t[head];
e[temp]=false;
tmp=first2[temp];
while(tmp!=-){
if(dis[v2[tmp]]>dis[temp]+w1[tmp]){
dis[v2[tmp]]=dis[temp]+w1[tmp];
if(!e[v2[tmp]]){
tail=(tail+)%;
e[v2[tmp]]=true;
t[tail]=v2[tmp];
}
}
tmp=next2[tmp];
}
}
ans2=;
for(i=;i<=n;i++)
ans2+=dis[i];
printf("%lld\n",ans1+ans2); //输出答案
}
return ;
}
 
 
 
 
 
 

SPFA算法(2) POJ 1511 Invitation Cards的更多相关文章

  1. 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 / ...

  2. POJ 1511 Invitation Cards (spfa的邻接表)

    Invitation Cards Time Limit : 16000/8000ms (Java/Other)   Memory Limit : 524288/262144K (Java/Other) ...

  3. POJ 1511 Invitation Cards (最短路spfa)

    Invitation Cards 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/J Description In the age ...

  4. Poj 1511 Invitation Cards(spfa)

    Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 24460 Accepted: 8091 De ...

  5. (简单) POJ 1511 Invitation Cards,SPFA。

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

  6. POJ 1511 Invitation Cards 链式前向星+spfa+反向建边

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 27200   Accepted: 902 ...

  7. POJ 1511 Invitation Cards(逆向思维 SPFA)

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

  8. [POJ] 1511 Invitation Cards

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 18198   Accepted: 596 ...

  9. POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 16178   Accepted: 526 ...

随机推荐

  1. 环境变量PATH超长问题[转]

    症状回放: 最近安装一个Delphi的控件,结果,在安装之后启动Delphi时出现了找不到相关文件的错误.一开始以为是Delphi内的Library路径没有添加,查看,一切正常.再次启动Delphi, ...

  2. March 22 2017 Week 12 Wednesday

    Satisfaction doesn't come from the outside, but from the inside. 满足感并非来自外界,而是来自内心. Everything that e ...

  3. JVM文章学习

     JVM 文章 Java虚拟机学习 - 体系结构 内存模型http://blog.csdn.net/java2000_wl/article/details/8009362 Java虚拟机学习 - 对象 ...

  4. 程序的优化(PHP)

    有些小细节往往容易被人忽视.有时候常常说优化代码优化代码,但是实际操作的时候,最容易被忽视的如下所示: echo 比 print 快. 使用echo的多重参数代替字符串连接. 在执行for循环之前确定 ...

  5. win10 安装YII2

    YII2下载地址:http://www.yiichina.com/download 高级版本和基本版本的区别是: 基础版只有一个只有一个web应用,高级版则生成前后台.建议使用高级版,方便 Yii2框 ...

  6. html基础用法(下)

    设计表格: <html> <head> <title>表格</title> <meta charset="utf-8" /&g ...

  7. Configuration 中无法自动注入依赖于component的bean

    出现问题时我这样使用依赖注入 @Configuration public class WebServiceConfig { @Autowired private IMessageWebService ...

  8. 替换html里面的\r\n及解决记事本中的每个段落只有一行的情形

    1. 在用python爬取小说的时候, 发现在内容里每次换行都有\r\n(即回车, 换行)出现. 此时可以采用  s.replace('\\r\\n','') , 其中s为字符串类型. 2. 在爬取完 ...

  9. HTTP头部信息解释分析

    HTTP 头部解释 1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Chars ...

  10. shiro笔记-"Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - ylw, rememberMe=false]. Possible unexpected error? (Typical or expected login exceptions should ext

    在学习shiro过程中遇到这个错误,在网上找了好久资料也没找到解决办法,大概都是说和传入的值有问题.于是我试着耐心看我自己的报错信息,最终找到了原因并解决.每个人的问题可能都会有差异,所以建议大家耐心 ...