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)的更多相关文章

  1. POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))

    题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...

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

  3. POJ1511 Invitation Cards —— 最短路spfa

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

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

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

  5. poj 1511 Invitation Cards(最短路中等题)

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

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

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

  7. poj 1511 Invitation Cards (最短路)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 33435   Accepted: 111 ...

  8. Poj 1511 Invitation Cards(spfa)

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

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

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

随机推荐

  1. Windows下tuxedo配置

    setenv.cmd rem (c) 2003 BEA Systems, Inc. All Rights Reserved. rem Copyright (c) 2000 BEA Systems, I ...

  2. C++ 中字符串标准输入的学习及实验

    声明:下面实验中[]里面表示要输入里面的符号,[]符号本身并未输入 1.cin>> cin使用空白(空格.制表符.回车)来确定字符串的结束位置. cin会将换行符留在输入输出队列中. #i ...

  3. freemarker中判断对象是否为空

    <#if xxx?exists> 或则 <#if xxx??>两个问号??最简单方便

  4. bzoj1562

    很明显是二分图匹配,关键是怎么求字典序最小 想到两种做法,首先是直接匹配,然后从第一位贪心调整 第二种是从最后一个倒着匹配,每次匹配都尽量选小的,这样一定能保证字典序最小 type node=reco ...

  5. BZOJ_1628_[Usaco2007_Demo]_City_skyline_(单调栈)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1628 给出\(n\)个距形的影子,问最少是多少个建筑的?(建筑的影子可以重叠). 分析 用单调 ...

  6. jquery live hover绑定方法

    $(".select_item span").live({ mouseenter: function() { $(this).addClass("hover") ...

  7. sqlserver 导入/导出Excel

    --从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句: /*=========================================================== ...

  8. Sublime-text markdown with Vim mode and auto preview

    说明 最近看到markdown相关的东西,被其书写方式吸引,其实以前就在找这种类似的工具,但是也没找到,由于习惯了Vim,可Vim不支持markdown预览,这点可能不是很好,于是找到Sublime- ...

  9. 【Mysql】初学命令行指南

    MYSQL初学者使用指南与介绍 一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbi ...

  10. mybatis Mapper XML 文件

    MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...