2019.01.22 SCU4444 Travel(最短路+bfs)
传送门
题意简述:给出一张nnn个点的完全图,有mmm条边边权为aaa其余点边权为bbb,问从111到nnn的最短路。
思路:分类讨论一波即可。
- (1,n)(1,n)(1,n)的边权为aaa,那么只用求从111到nnn不经过给出边的最短路,这个用set+bfsset+bfsset+bfs解决。
- (1,n)(1,n)(1,n)的边权为bbb,那么只用求从111到nnn经过给出边的最短路,上spfaspfaspfa或者dijkstradijkstradijkstra
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
const int N=1e5+5;
typedef long long ll;
const ll inf=1e18;
int n,m;
ll dis[N],a,b;
set<int>all,tmp;
vector<int>e[N];
typedef set<int>::iterator It;
inline ll bfs(int type){
fill(dis+1,dis+n+1,inf);
queue<int>q;
if(!type){
ll ret=b;
q.push(1),dis[1]=0;
while(!q.empty()){
int x=q.front();
q.pop();
if(dis[x]>=ret)continue;
for(ri i=0,v;i<e[x].size();++i)if(dis[v=e[x][i]]>dis[x]+a)dis[v]=dis[x]+a,q.push(v);
}
return min(ret,dis[n]);
}
ll ret=a;
q.push(1),dis[1]=0;
for(ri i=2;i<=n;++i)all.insert(i);
while(!q.empty()){
int x=q.front();
q.pop();
if(dis[x]>=ret)continue;
if(x==n)return dis[x];
for(ri i=0,v;i<e[x].size();++i){
if(!all.count(v=e[x][i]))continue;
else tmp.insert(v),all.erase(v);
}
for(It it=all.begin();it!=all.end();++it)dis[*it]=dis[x]+b,q.push(*it);
all.swap(tmp),tmp.clear();
}
return ret;
}
int main(){
while(~scanf("%d%d%lld%lld",&n,&m,&a,&b)){
all.clear(),tmp.clear();
for(ri i=1;i<=n;++i)e[i].clear();
bool flag=0;
for(ri i=1,u,v;i<=m;++i){
u=read(),v=read();
e[u].push_back(v),e[v].push_back(u);
if((u==1&&v==n)||(u==n&&v==1))flag=1;
}
cout<<bfs(flag)<<'\n';
}
return 0;
}
2019.01.22 SCU4444 Travel(最短路+bfs)的更多相关文章
- Tensorflow学习笔记2019.01.22
tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...
- 2019.01.22 poj2926 Requirements(状态压缩)
传送门 题意:给一堆五维的点,求最远点对. 思路:跟CF1093G差不多 考虑把正负号状压成一个323232以内的数,然后对于每一类分别求最大最小值再做差更新答案即可. 代码: #include< ...
- 2019.01.22 51nod 1203 JZPLCM(线段树+链表)
传送门 一道很有意思的题. 题意简述:给一个数列,多次询问区间的lcmlcmlcm,答案对1e9+71e9+71e9+7取模. 思路:首先考虑到一个区间的lcmlcmlcm就是其中所有出现过的素数的最 ...
- 2019.01.22 bzoj3333: 排队计划(逆序对+线段树)
传送门 题意简述:给出一个序列,支持把ppp~nnn中所有小于等于apa_pap的'扯出来排序之后再放回去,要求动态维护全局逆序对. 思路:我们令fif_ifi表示第iii个位置之后比它大的数的个 ...
- 2019.01.22 hdu5195 DZY Loves Topological Sorting(贪心+线段树)
传送门 题意简述:给出一张DAGDAGDAG,要求删去不超过kkk条边问最后拓扑序的最大字典序是多少. 思路:贪心帮当前不超过删边上限且权值最大的点删边,用线段树维护一下每个点的入度来支持查询即可. ...
- 2019.01.22 zoj3583 Simple Path(并查集+枚举)
传送门 题意简述:给出一张图问不在从sss到ttt所有简单路径上的点数. 思路: 枚举删去每个点然后把整张图用并查集处理一下,同时不跟sss和ttt在同一个连通块的点就是满足要求的点(被删去的不算). ...
- 2019.01.22 bzoj3875: [Ahoi2014&Jsoi2014]骑士游戏(spfa+dp)
传送门 题意简述:nnn个怪物,对于编号为iii的怪物可以选择用aia_iai代价将其分裂成另外的bib_ibi个怪物或者用cic_ici代价直接消灭它,现在问消灭编号为1的怪物用的最小代价. ...
- 2019.01.22 bzoj2874: 训练士兵(主席树)
传送门 题意简述:给出一个n∗mn*mn∗m的矩阵n,m≤1e8n,m\le1e8n,m≤1e8,支持矩形加,矩形求和,强制在线. 思路:第一眼二维动态开点线段树,上网去搜有没有这种做法发现会被卡时空 ...
- 2019.01.22 uoj#14. 【UER #1】DZY Loves Graph(并查集)
传送门 题意简述: 要求支持以下操作: 在a与b之间连一条长度为i的边(i是操作编号):删除当前图中边权最大的k条边:表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作. 要求在每次操作后 ...
随机推荐
- python字典设置初始值setdefault()与get()
L = ['you','me','you','me','you','me','you'] D = {} for i in L: D[i] += 1 print(D) 执行以下代码会发生错误 Trace ...
- HDU-1087.SuperJUmpingJUmpingJumping.(DP and LISPP)
本题大意:给定一个长度为n的序列a,让你输出这个序列子序列中元素和最大的最大上升子序列. 本题思路:一开始肯定可以想到用LIS实现,我们用LIS实现的时候可以发现这个问题并不满足LIS问题的最优子结构 ...
- Unity4.6证书激活问题
第一次运行的激活问题 安装好Unity4.6之后首次启动会自动连网,但是会出现error loading page错误,SSL peer certificate or SSH remote key w ...
- TZOJ 1911 A Plug for UNIX(最大流)
描述 You are in charge of setting up the press room for the inaugural meeting of the United Nations In ...
- HelloWorld 基础语法
所有内容取自菜鸟教程 public class HelloWorld { /* 第一个Java程序 * 它将打印字符串 Hello World */ public stat ...
- 2017.9.26JQuery源码解析一 架构与依赖
jq1.0: css选择符 事件处理 ajax交互 1.2.3: 引入数据缓存,解决循环引用与大数据保存问题 1.3. : 使用全新的选择器引擎sizzle,在各个浏览器下全面超越其他同类js ...
- vs2017连接mysql以及问题汇总
https://www.cnblogs.com/eye-like/p/8494355.html https://blog.csdn.net/u012658972/article/details/791 ...
- jquery滚动事件
滚动到一定高度: $(window).scroll(function(){ var scrollTop = $(document).scrollTop(); && scrollTop ...
- python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
http://www.cnblogs.com/linhaifeng/articles/7580830.html 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数
- 时间处理:计算下一天日期,如输入"2004/12/31"(注释2014年12月31日),则输出"2005/1/1".
/* ============================================================================ Name : Exercise.c Au ...