传送门

题意简述:给出一张nnn个点的完全图,有mmm条边边权为aaa其余点边权为bbb,问从111到nnn的最短路。


思路:分类讨论一波即可。

  1. (1,n)(1,n)(1,n)的边权为aaa,那么只用求从111到nnn不经过给出边的最短路,这个用set+bfsset+bfsset+bfs解决。
  2. (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)的更多相关文章

  1. Tensorflow学习笔记2019.01.22

    tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...

  2. 2019.01.22 poj2926 Requirements(状态压缩)

    传送门 题意:给一堆五维的点,求最远点对. 思路:跟CF1093G差不多 考虑把正负号状压成一个323232以内的数,然后对于每一类分别求最大最小值再做差更新答案即可. 代码: #include< ...

  3. 2019.01.22 51nod 1203 JZPLCM(线段树+链表)

    传送门 一道很有意思的题. 题意简述:给一个数列,多次询问区间的lcmlcmlcm,答案对1e9+71e9+71e9+7取模. 思路:首先考虑到一个区间的lcmlcmlcm就是其中所有出现过的素数的最 ...

  4. 2019.01.22 bzoj3333: 排队计划(逆序对+线段树)

    传送门 题意简述:给出一个序列,支持把ppp~nnn中所有小于等于apa_pap​的'扯出来排序之后再放回去,要求动态维护全局逆序对. 思路:我们令fif_ifi​表示第iii个位置之后比它大的数的个 ...

  5. 2019.01.22 hdu5195 DZY Loves Topological Sorting(贪心+线段树)

    传送门 题意简述:给出一张DAGDAGDAG,要求删去不超过kkk条边问最后拓扑序的最大字典序是多少. 思路:贪心帮当前不超过删边上限且权值最大的点删边,用线段树维护一下每个点的入度来支持查询即可. ...

  6. 2019.01.22 zoj3583 Simple Path(并查集+枚举)

    传送门 题意简述:给出一张图问不在从sss到ttt所有简单路径上的点数. 思路: 枚举删去每个点然后把整张图用并查集处理一下,同时不跟sss和ttt在同一个连通块的点就是满足要求的点(被删去的不算). ...

  7. 2019.01.22 bzoj3875: [Ahoi2014&Jsoi2014]骑士游戏(spfa+dp)

    传送门 题意简述:nnn个怪物,对于编号为iii的怪物可以选择用aia_iai​代价将其分裂成另外的bib_ibi​个怪物或者用cic_ici​代价直接消灭它,现在问消灭编号为1的怪物用的最小代价. ...

  8. 2019.01.22 bzoj2874: 训练士兵(主席树)

    传送门 题意简述:给出一个n∗mn*mn∗m的矩阵n,m≤1e8n,m\le1e8n,m≤1e8,支持矩形加,矩形求和,强制在线. 思路:第一眼二维动态开点线段树,上网去搜有没有这种做法发现会被卡时空 ...

  9. 2019.01.22 uoj#14. 【UER #1】DZY Loves Graph(并查集)

    传送门 题意简述: 要求支持以下操作: 在a与b之间连一条长度为i的边(i是操作编号):删除当前图中边权最大的k条边:表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作. 要求在每次操作后 ...

随机推荐

  1. 颜色 color

    在res/values文件夹下的color.xml添加 <?xml version="1.0" encoding="utf-8"?> <res ...

  2. 微信小程序开发——使用回调函数出现异常:TypeError: Cannot read property 'setData' of undefined

    关键技术点: 作用域问题——回调函数中的作用域已经脱离了调用函数了,因此需要在回调函数外边把this赋给一个新的变量才可以了. 业务需求: 微信小程序开发,业务逻辑需要,需要把获取手机号码的业务逻辑作 ...

  3. bootstrap-table 使用遇到的问题总结

    问题一:右上角button样式自定义 方法: //修改bootstrap-table右上角按钮样式 $(".table-box .columns-right button").re ...

  4. HDU 1255 覆盖的面积(线段树面积并)

      描述 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正 ...

  5. [剑指Offer]24-反转链表

    题目链接 https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId=11168&t ...

  6. c#: 以模态窗口显示于其它进程窗体之前

    产品之工具箱,需要工具以模态窗体,显示于主界面之上.记下代码点,以做备忘. 1.IWin32Window internal class Win32Window : IWin32Window { pub ...

  7. swift4.2 - UIDynamic

    1. SB放上俩 imageview,拖线成类属性 import UIKit class ViewController: UIViewController { @IBOutlet weak var b ...

  8. Java_7.2库存管理

    package demo1; import java.util.ArrayList; import java.util.Scanner; public class Demo1 { public sta ...

  9. 30-算法训练 最短路 spfa

    http://lx.lanqiao.cn/problem.page?gpid=T15 算法训练 最短路   时间限制:1.0s   内存限制:256.0MB        问题描述 给定一个n个顶点, ...

  10. 四元数运动学笔记(5)IMU驱动的运动误差方程

    1.扩展卡尔曼滤波EKF1.1线性化卡尔曼滤波1.2偏差微分方程的推导1.3线性化卡尔曼滤波的流程1.4 离散EKF2.误差状态的运动方程2.1连续时间的IMU系统动态方程2.1.1相关变量2.1.2 ...