P1342 请柬

题目描述

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

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

比较简单的一到最短路题目,对于返回,建反向边求最短路即可

#include<cstdio>
#include<queue>
#include<cstring>
#define N 2000005
#define inf 0x7fffffff
#define LL long longusing namespace std;
int tot,n,m,head1[N],d[N],vis[N],head2[N],tpt;
LL ans;
struct node{int to,next,dis;
};
node e1[N],e2[N];void add(int u,int v,int w,int tp){if(tp==1){e1[++tot].to=v;e1[tot].next=head1[u];head1[u]=tot;e1[tot].dis=w;}else {e2[++tpt].to=v;e2[tpt].next=head2[u];head2[u]=tpt;e2[tpt].dis=w;}
}inline void spfa(int st,int tp){for(int i=1;i<=n;i++) d[i]=inf;memset(vis,0,sizeof(vis));d[st]=0;vis[st]=1;queue<int>q;q.push(st);if(tp==1)while(!q.empty()){int x=q.front();q.pop();vis[x]=0;for(int i=head1[x];i;i=e1[i].next){int to=e1[i].to,w=e1[i].dis;if(d[x]+w<d[to]){d[to]=d[x]+w;if(!vis[to]){q.push(to);vis[to]=1;}}} }elsewhile(!q.empty()){int x=q.front();q.pop();vis[x]=0;for(int i=head2[x];i;i=e2[i].next){int to=e2[i].to,w=e2[i].dis;if(d[x]+w<d[to]){d[to]=d[x]+w;if(!vis[to]){q.push(to);vis[to]=1;}}} }
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);add(u,v,w,1);add(v,u,w,2);}spfa(1,1);for(int i=1;i<=n;i++){ans+=d[i];}spfa(1,2);for(int i=1;i<=n;++i){ans+=d[i];}printf("%lld",ans);return 0;
} 

// luogu-judger-enable-o2
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#define LL long long
using namespace std;
#define LL long long
LL n,m,s,ans;
typedef pair<LL,int> pii;
struct ahah{int nxt,to,dis;
}edge1[1000010],edge2[1000006];
int head1[1000010],tot1,head2[1000006],tot2;
void add(int x,int y,int z,int flag)
{if(flag==1)edge1[++tot1].nxt=head1[x],edge1[tot1].to=y,edge1[tot1].dis=z,head1[x]=tot1;else edge2[++tot2].nxt=head2[x],edge2[tot2].to=y,edge2[tot2].dis=z,head2[x]=tot2;
}
priority_queue <pii,vector<pii>,greater<pii> >Q;
bool vis[1000010];
LL d[1000010];
void dijkstra1(int s)
{for(int i=1;i<=n;i++)d[i]=1e15;Q.push(make_pair(0,s));d[s]=0;while(!Q.empty()){while(!Q.empty()&&vis[Q.top().second])Q.pop();if(Q.empty())return ;int temp=Q.top().second;d[temp]=Q.top().first;vis[temp]=1;Q.pop();for(int i=head1[temp];i;i=edge1[i].nxt){if(!vis[edge1[i].to])Q.push(make_pair(d[temp]+edge1[i].dis,edge1[i].to));}}return ;
}
void dijkstra2(int s)
{for(int i=1;i<=n;i++)d[i]=1e15;Q.push(make_pair(0,s));d[s]=0;while(!Q.empty()){while(!Q.empty()&&vis[Q.top().second])Q.pop();if(Q.empty())return ;int temp=Q.top().second;d[temp]=Q.top().first;vis[temp]=1;Q.pop();for(int i=head2[temp];i;i=edge2[i].nxt){if(!vis[edge2[i].to])Q.push(make_pair(d[temp]+edge2[i].dis,edge2[i].to));}}return ;
}
main()
{int x,y,z;scanf("%lld%lld",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);add(x,y,z,1);add(y,x,z,2);}dijkstra1(1);for(int i=2;i<=n;i++)ans+=d[i];memset(vis,0,sizeof(vis));dijkstra2(1);for(int i=2;i<=n;i++)ans+=d[i];printf("%lld",ans);
}

转载于:https://www.cnblogs.com/song-/p/9716058.html

洛谷——P1342 请柬相关推荐

  1. [洛谷P1342]请柬

    题目大意:有n个站,和m条单向边,每条边有乘车价值,保证汽车能开回来.有n-1个学生从1出发,分别到n-1个不同的点,然后回来.求最少的总价值. 解题思路:最短路,求回来的最少价值其实可以建立反向图, ...

  2. 洛谷4277:萃香的请柬——题解

    https://www.luogu.org/problemnew/show/P4277 萃香在小时候就一直有一个梦想,就是邀请全乡居民一起参加宴会,在上次发动异变被灵梦退治之后她仍旧没有放弃,而是在元 ...

  3. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  4. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  5. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  6. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  7. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  8. 洛谷P1417 烹调方案

    洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...

  9. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )

    昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...

最新文章

  1. 二级C语言学习宝典下载,二级C语言学习宝典
  2. LeetCode 662 二叉树最大宽度
  3. jmeter php网站,jmeter实战之phpwind随机回帖/发帖
  4. 汇编语言:汇编程序的hello world程序(实验9根据材料编程)
  5. python与matlab比较_python和matlab如何选择?
  6. 轻量级网络模型之ShuffleNet
  7. exe反编译为python语言_如何反编译Python写的exe到py
  8. 2022-2023 物联网毕业设计选题推荐
  9. 爬取去哪儿酒店信息及评论
  10. Opencv中,椭圆拟合后,得到该椭圆方程系数。
  11. 3d打印技术与计算机,讲述3D打印技术是如何实现打印的,与普通的打印有何不同...
  12. 弄懂 JavaScript 执行机制,宏任务和微任务
  13. U盘无法格式化的几个解决方法
  14. 洗衣店小程序,共享洗衣小程序,干洗店小程序毕设作品
  15. 总结整理时下流行的浏览器User-Agent大全
  16. SMS短信中英文混合编码
  17. pdf怎么转换成txt?
  18. Google Earth Engine ——GCOM-C 进行长期和持续的陆地地表温度数据集(JAXA/GCOM-C/L3/LAND/LAI/V2)
  19. 怎样成为解决问题的高手?——关于问题解决的关键4步骤
  20. 隐藏站长统计4个字的方法

热门文章

  1. BZOJ2705 [SDOI2012]Longge的问题 欧拉函数
  2. 一个关于组织学员学习技术的笔试题--求讨论
  3. Docker 学习应用篇之一: 初识Docker
  4. 在VS中MFC、ATL与WIN32有什么联系或区别?
  5. linq to sql简单使用
  6. Android CTS 测试总结【转】
  7. 路由器无线桥接 router wireless bridge
  8. 查询某一个表的字段和数据类型
  9. USB 2.0高速和全速的区别
  10. 问题 F: 小鱼的格子裁剪(dfs)