题目传送门

题目大意:(其实概括出来也就基本做完了hh)在一张有$n$个点,$m$条边的无向图上,有$k$个点是不能经过的,而与之距离不超过$s$的点,到他们会花费$Q$元,到其他点会花费$p$元,求1到$n$花费的最小价钱。


概括完题意也就非常明了了。我们需要把图上的点分为三类,这部分可以由一个$bfs$求得。

void bfs()
{
while(!q1.empty())
{
int u=q1.front().second;
int val=q1.front().first;q1.pop();
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(val+<=s&&dan[v]==)
dan[v]=,q1.push(make_pair(val+,v));
}
}
}

之后就是裸的最短路了=w=,注意松弛的时候分类讨论&&开longlong&&最后得出答案的时候减去终点的花费(不住了)

Code

#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#define maxn 100090 using namespace std;
typedef long long ll; int n,m,k,s,tot,P,Q;
int head[maxn],dan[maxn],vis[maxn];
ll dis[maxn];
struct node{
int to,next,val;
}edge[maxn*];
queue<pair<int,int> >q1; void add(int x,int y)
{
edge[++tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
} void bfs()
{
while(!q1.empty())
{
int u=q1.front().second;
int val=q1.front().first;q1.pop();
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(val+<=s&&dan[v]==)
dan[v]=,q1.push(make_pair(val+,v));
}
}
} void dijkstra()
{
priority_queue<pair<ll,int> >q;
for(int i=;i<=n;i++) dis[i]=1e18;
dis[]=;q.push(make_pair(,));
while(!q.empty())
{
int u=q.top().second;q.pop();
if(vis[u]) continue;
vis[u]=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(dan[v]==-) continue;
if(dan[v]==&&dis[v]>dis[u]+P)
{
dis[v]=dis[u]+P;
q.push(make_pair(-dis[v],v));
}
if(dan[v]==&&dis[v]>dis[u]+Q)
{
dis[v]=dis[u]+Q;
q.push(make_pair(-dis[v],v));
}
}
}
} int main()
{
scanf("%d%d%d%d",&n,&m,&k,&s);
scanf("%d%d",&P,&Q);
for(int i=,x;i<=k;i++) scanf("%d",&x),dan[x]=-,q1.push(make_pair(,x));
for(int i=;i<=m;i++)
{
int x=,y=;
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
bfs();
dijkstra();
if(dan[n]==) printf("%lld\n",dis[n]-P);
else printf("%lld\n",dis[n]-Q);
return ;
}

最新文章

  1. 文件夹锁定(Source)
  2. 基于DDD的.NET开发框架 - ABP模块设计
  3. 解决Github使用Fastly CDN而导致不能加载网页的方法 转自 沙丘:http://www.enkoo.net/fastly-cdn-in-gifhub.html
  4. 图层类(CCLayer)
  5. 还是畅通工程 --HDOJ 1233
  6. 打印出所有&amp;quot;水仙花数
  7. java里程碑之泛型--使用泛型
  8. Node.js DNS 模块
  9. 帝国cms 不能正常显示最新文章
  10. 【转载】DRuid 大数据分析之查询
  11. MySQL拓展操作
  12. ActiveMQ发布订阅模式 转发 https://www.cnblogs.com/madyina/p/4127144.html
  13. appium如何解决每次都要安装apk的烦恼
  14. VirtualBox网络的Host-Only配置
  15. swift 各种学习
  16. TFT LCD显示原理详解
  17. linux环境下,对于一个大文件,如何查看其中某行的内容
  18. 07-border(边框)
  19. Spring 常见注解
  20. 使用postman测试文件上传

热门文章

  1. openwrt hotplug
  2. Android图表AChartEngine
  3. jquery一个比较好的轮播图jQuery.kinMaxShow介绍
  4. intellij IDEA 更新java后不用重启tomcat
  5. LOJ#139. 树链剖分
  6. cocos2d-x交叉编译到安卓
  7. POJ 3279 Dungeon Master
  8. Android系统开发入门
  9. ap和路由器有什么区别 ap和路由器的区别介绍【图文】
  10. 网站建设中用JS判断时间并显示不同内容