codeforces144——D. Missile Silos

原题链接

题意:

给定一个n点m边的无向图,给定起点,求和起点最短距离为l的点有多少个(可以是点也可以在边上)

思路:

首先求一遍最短路,处理出每个点到起点的最短距离,这样遍历一遍点就可以求出和起点最短距离为l的点的个数。

再来考虑该点在边上的情况,我们遍历每条边,如果该点在边上,假设边的顶点为u和v,无非三种情况,一是该点在u和v的中点上,二是该点更加靠近u,三是该点更加靠近v。

接下来将逐一分析。我们假设起点S,边的顶点u,v的关系如下图。


当该点在u,v中点时,一定满足dis[u]+dis[v]+w==2*l;
当该点更靠近u时,首先就是dis[u]<l,说明该点不在s和u的中间;再就是l-dis[u]<w,说明多出来的这部分不会超过v;然后就是w-(l-dis[u])>l-dis[v],说明该点到u的距离小于该点到v的距离,即该点更靠近u。
当该点更靠近v时也同理。
具体细节如下:

int u=edge[j].u,v=edge[j].e,w=edge[j].w;
if(dis[u]<l&&l-dis[u]<w&&w-l+dis[u]>l-dis[v]) res++;//更靠近u
if(dis[v]<l&&l-dis[v]<w&&w-l+dis[v]>l-dis[u]) res++;//更靠近v
if(dis[u]<l&&dis[v]<l&&dis[u]+dis[v]+w==l*2) res++;///在重点

代码:

///#pragma GCC optimize(3)
///#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")
///#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll>PLL;
typedef pair<int,int>PII;
typedef pair<double,double>PDD;
#define I_int ll
inline ll read()
{ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
char F[200];
inline void out(I_int x) {if (x == 0) return (void) (putchar('0'));I_int tmp = x > 0 ? x : -x;if (x < 0) putchar('-');int cnt = 0;while (tmp > 0) {F[cnt++] = tmp % 10 + '0';tmp /= 10;}while (cnt > 0) putchar(F[--cnt]);//cout<<" ";
}
ll ksm(ll a,ll b,ll p){ll res=1;while(b){if(b&1)res=res*a%p;a=a*a%p;b>>=1;}return res;}
const int inf=0x3f3f3f3f,mod=998244353;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+7,maxm=3e5+7,N=1e6+7;
const double PI = atan(1.0)*4;int n,m,s;
struct node{int e,ne,w,u;
}edge[maxn];
int h[maxn],idx;void add(int u,int v,int w){edge[idx].u=u,edge[idx].e=v,edge[idx].w=w,edge[idx].ne=h[u],h[u]=idx++;
}int dis[maxn],st[maxn];void spfa(int s){memset(dis,0x3f,sizeof dis);queue<int>q;q.push(s);dis[s]=0;st[s]=1;while(!q.empty()){int t=q.front();q.pop();st[t]=0;for(int i=h[t];i!=-1;i=edge[i].ne){int j=edge[i].e;if(dis[j]>dis[t]+edge[i].w){dis[j]=dis[t]+edge[i].w;if(!st[j]){q.push(j);st[j]=1;}}}}
}int main(){memset(h,-1,sizeof h);n=read(),m=read(),s=read();for(int i=1;i<=m;i++){int u=read(),v=read(),w=read();add(u,v,w);add(v,u,w);}int l=read();spfa(s);int res=0;for(int i=1;i<=n;i++)if(dis[i]==l) res++;for(int j=0;j<idx;j+=2){int u=edge[j].u,v=edge[j].e,w=edge[j].w;if(dis[u]<l&&l-dis[u]<w&&w-l+dis[u]>l-dis[v]) res++;if(dis[v]<l&&l-dis[v]<w&&w-l+dis[v]>l-dis[u]) res++;if(dis[u]<l&&dis[v]<l&&dis[u]+dis[v]+w==l*2) res++;}out(res);return 0;
}

codeforces144——D. Missile Silos(最短路+枚举)相关推荐

  1. codeforces 144D Missile Silos(最短路)

    转载请注明出处: http://www.cnblogs.com/fraud/           --by fraud Missile Silos A country called Berland c ...

  2. Codeforces 144D. Missile Silos 最短路

    D. Missile Silos time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  3. CF 144D Missile Silos [最短路+想法]

    题意: 给出一张图和图上的一个顶点,求距离这个点距离为s(最短距离)的顶点或边上的点总共有几个(边上的点要保证也是最短距离) 分析: 先用DIJ求出最短路 然后对所有顶点,距离为s的点都算上 枚举每条 ...

  4. 【CodeForces - 144D】Missile Silos(单源最短路,枚举中间边,枚举情况可能性)

    题干: A country called Berland consists of n cities, numbered with integer numbers from 1to n. Some of ...

  5. CF144D Missile Silos 解题报告 *

    CF144D Missile Silos 解题报告 1 题目链接 https://codeforces.com/problemset/problem/144/D 2 题目整理 题目 : 导弹发射井 题 ...

  6. UVALive 6885 Flowery Trails 最短路枚举

    题目连接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=129723 题意: 给你一个n点m图的边 1到n有多条最短路 ...

  7. POJ #1062 昂贵的聘礼 有限制的最短路 枚举+dijkstra求最短路

    Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...

  8. hdu 2363(最短路+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363 思路:和之前hdu上做过的一题很像...就是先求求出所有的高度差,排序后枚举,每次都一次spfa ...

  9. Codeforces 144D: Missile Silos

    链接:http://codeforces.com/problemset/problem/144/D 题意:题目给你一个无向边权图,然后给你一个点s,和长度l,问距离点s长度为l的点有多少,这些点可以在 ...

最新文章

  1. Android底层禁用WiFi和蓝牙功能
  2. Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解...
  3. 大数据之搭建HDP环境,以三个节点为例(上——部署主节点以及服务)
  4. java单链表存储结构_Java数据结构——单链表
  5. python request 等待网页加载_用Python开发爬虫,看这篇文章就够了
  6. 和“内存杀手” Chrome 说再见!新版 Edge 即将发布
  7. B860AV2.1盒子刷机
  8. 网页中人民币符号的正确输入姿势
  9. 分享一组超喜欢的粉色樱花高清壁纸~
  10. 绿盟于旸:让阿里安娜火箭爆炸的缓冲区溢出 linkboy语录:tk出品必是精品呵呵...
  11. 嵌入式微处理器详述(1)---什么是嵌入式微处理器
  12. Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作
  13. 黄鸭兄《傲慢是精英的耻辱,谦虚是精英的责任》摘录
  14. c语言程序设计教程刘三满答案,清华大学出版社-图书详情-《C语言程序设计教程》...
  15. 大数据乘(tu)风(tou)破(bian)浪(qiang)之路
  16. Delphi桌面精灵开发
  17. LANMT架构搭建jspxcms
  18. 【java毕业设计】基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码)——工厂进销存管理系统
  19. icepdf java_icepdf 一款功能强大的PDF阅读、打印、注释工具,java实现,跨平台。 Develop 238万源代码下载- www.pudn.com...
  20. 护眼灯防蓝光什么意思?2022最新的护眼效果最好的led护眼灯推荐

热门文章

  1. 基于iptables的SNAT+DNAT+docker服务器集群搭建
  2. Android带分隔符的输入手机号码的EditText
  3. html5使用 callapp-lib 唤起app (教程)+ 踩坑系列
  4. USACO2002 Open:雄伟的山峦
  5. ​​提升纳税人满意度工作汇报
  6. 服装企业生产管理体现
  7. 计算机二级怎么自学 学习方法有哪些
  8. 6-1 字符串 - 8. 输入字符串分数 10
  9. 为什么很多善良的人一生痛苦、磨难很多?
  10. 雷军持股小米科技高达77.8%!小米、美的突然“在一起”,都有什么机会与暗礁?