最近一直在做最短路......所以今天就再做一道最短路吧。。。。

题目描述

在电视时代,没有多少人观看戏剧表演。Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片。他们已经打印请帖和所有必要的信息和计划。许多学生被雇来分发这些请柬。每个学生志愿者被指定一个确切的公共汽车站,他或她将留在那里一整天,邀请人们参与。

这里的公交系统是非常特殊的:所有的线路都是单向的,连接两个站点。公共汽车离开起始点,到达目的地之后又空车返回起始点。学生每天早上从总部出发,乘公交车到一个预定的站点邀请乘客。每个站点都被安排了一名学生。在一天结束的时候,所有的学生都回到总部。现在需要知道的是,学生所需的公交费用的总和最小是多少。

输入输出格式

输入格式:

第1行有两个整数n、m(1<=n,m<=1000000),n是站点的个数,m是线路的个数。

然后有m行,每行描述一个线路,包括3个整数,起始点,目的地和价格。

总部在第1个站点,价钱都是整数,且小于1000000000。

输出格式:

输出一行,表示最小费用。

输入输出样例

输入样例#1:

4 6
1 2 10
2 1 60
1 3 20
3 4 10
2 4 5
4 1 50
输出样例#1:

210 

说明

【注意】

此题数据规模较大,需要使用较为高效的算法,此题不设小规模数据分数。

解析:

首先第一眼我们就能看到说明,,,一看到高效算法,我就想起SPFA,,,

SPFA当年是多么地风光,如今又是多么地落魄。。。所以这题是肯定要Dijkstra+堆优化的。。。

下面我们看一下这个题:

由于是从总部到各点,再从各点回到总部,所以开两个邻接表,一次装去时的,一次去回来时的。

所以!!!(敲黑板划重点啦)

这个题的本质就是求两次单源最短路的和

所以我们只需要跑两遍Dijkstra就完事了

价格小于1000000000,显然是要用long long的。

最后,一定要加读入优化啊!!!(不快读会T)

下面给出AC代码和原题链接:

 #include<bits/stdc++.h>
#define inf 336860180
using namespace std;
long long total2,ans,n,m,x,y,v[],w[],nxt[],head[],v2[],w2[],nxt2[],head2[],minn,dist[],t,f,total,b1,b2,b3;
bool pd[];
typedef pair<long long,long long>P;
long long read()
{
int f=;x=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*=f;
}
void add(long long a,long long b,long long c)
{
total++;
v[total]=b;
w[total]=c;
nxt[total]=head[a];
head[a]=total;
return;
}
void add2(long long a,long long b,long long c)
{
total2++;
v2[total2]=b;
w2[total2]=c;
nxt2[total2]=head2[a];
head2[a]=total2;
return;
}
int main()
{
priority_queue<P,vector<P>,greater<P> >q;
memset(head,-,sizeof(head));
memset(head2,-,sizeof(head2));
memset(dist,,sizeof(dist));
cin>>n>>m;
for(int i=;i<=m;i++)
{
b1=read();b2=read();b3=read();
add(b1,b2,b3);
add2(b2,b1,b3);
}
dist[]=;
q.push(P(,));
while(q.size())
{
long long tmp=q.top().second;
q.pop();
if(pd[tmp])continue;
pd[tmp]=;
for(int i=head[tmp];i!=-;i=nxt[i])
{
if(dist[v[i]]>dist[tmp]+w[i])
{
dist[v[i]]=dist[tmp]+w[i];
q.push(P(dist[v[i]],v[i]));
}
}
}
for(int i=;i<=n;i++)ans+=dist[i];
memset(dist,,sizeof(dist));
dist[]=;
q.push(P(,));
memset(pd,,sizeof(pd));
while(q.size())
{
long long tmp=q.top().second;
q.pop();
if(pd[tmp])continue;
pd[tmp]=;
for(int i=head2[tmp];i!=-;i=nxt2[i])
{
if(dist[v2[i]]>dist[tmp]+w2[i])
{
dist[v2[i]]=dist[tmp]+w2[i];
q.push(P(dist[v2[i]],v2[i]));
}
}
}
for(int i=;i<=n;i++)ans+=dist[i];
cout<<ans;
return ;
}

  

原题:https://www.luogu.org/problemnew/show/P1342

还有一道和此题完全相同且数据量更小的题:https://www.luogu.org/problemnew/show/P1629;

这么好的题解,不关注+素质三连一波吗???

P1342 请柬的更多相关文章

  1. 洛谷P1342 请柬

    P1342 请柬 题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计划.许多学 ...

  2. 洛谷——P1342 请柬

    P1342 请柬 题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计划.许多学 ...

  3. 洛谷 P1342 请柬 最短路+Dijkstra算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1342 请柬 题目描述 在电视时代,没有多少人观看戏 ...

  4. 洛谷P1342 请柬(SPFA)

    To 洛谷.1342 请柬 题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计 ...

  5. 洛谷 P1342 请柬(SPFA)

    题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计划.许多学生被雇来分发这些请 ...

  6. 洛谷 P1342 请柬

    题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计划.许多学生被雇来分发这些请 ...

  7. 洛谷—— P1342 请柬

    https://www.luogu.org/problemnew/show/1342 题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤 ...

  8. luogu P1342 请柬

    题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计划.许多学生被雇来分发这些请 ...

  9. 洛谷P1342请柬

    传送门啦 核心思想:两遍最短路. 1号点去各地的时间直接套最短路模板,各地到1号点时间用逆向思维,视为求1号点沿反边到各地的时间即可. #include <iostream> #inclu ...

随机推荐

  1. SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)

    在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...

  2. Django与supervisor 管理进程

    1.前言 在Django项目中,我们需要用到一些独立于Django框架外的脚本.这样一些脚本可能需要独立的持续运行,且具有很强的可维护性,这个时候supervisor就可以排上用场了. 基于pytho ...

  3. Chapter 1 An Overview of Computers and Programming Languages

    Babylon巴比伦 loom织布机 weaver, WHO uses loom to work census: to count the population tabulate: make into ...

  4. wangEditor大图片上传问题

    wangEditor上传大图片时候会 上传超时.后端没有问题,我百度很多,又去群里问,都得不到答案.最后问同事,有个属性  editor.config.uploadTimeout = 10000000 ...

  5. hdfs 路径不支持‘:’

    hdfs 路径不支持‘:’,但Linux支持. -put: Pathname /public/platform/control_center/file_center/weiflow/core-user ...

  6. mysql字符集校对

    常用的两种 utf8_general_ci 按照普通的字母顺序,而且不区分大小写(比如:a B c D)utf8_bin 按照二进制排序(比如:A排在a前面,B D a c) ci是 case ins ...

  7. Python基础之列表深浅复制和列表推导式

    一.列表深浅复制: 浅拷贝内存图如下: 深拷贝内存图如下: 二.列表推导式: 实例: """ 列表推导式 练习:exercise01 """ ...

  8. C#获取本周五日期字符串

    using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using ...

  9. 5. Scala函数式编程的基础

    5.1 函数式编程内容及介绍顺序说明 5.1.1 函数式编程内容 -函数式编程基础 函数定义/声明 函数运行机制 递归(难点,[最短路径,邮差问题,迷宫问题,回溯]) 过程 惰性函数和异常 -函数式编 ...

  10. Angular2 ng2-smart-table

    ng2-smart-table 入门 安装 你要做的就是运行以下命令: npm install --save ng2-smart-table 此命令将创建在你的`package.json`文件和安装包 ...