题意:

给出一张图和图上的一个顶点,求距离这个点距离为s(最短距离)的顶点或边上的点总共有几个(边上的点要保证也是最短距离)

分析:

先用DIJ求出最短路

然后对所有顶点,距离为s的点都算上

枚举每条边

边上的两个顶点如果距离不够,则看在边上能不能找到一个点,顶点上的距离加上这个顶点到点的距离能为s(注意保证这个距离是最小距离(即这个点通过另外一端的顶点距离源点的距离小大于这个s))。数出这样的点的个数,加上。注意重合点的情况,有的边上一个这样的点都没有,有的只有1个,有的有两个点,有的两个点重合

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
#define pb push_back
using namespace std;
int dis;
int cnt=0;
const int INF=INT_MAX;
const int MAX_V=111111;
struct edge{int from,to,cost,rev,mid;}ed[MAX_V];
typedef pair<int,int>P;
int V;
vector<edge> G[MAX_V];
int d[MAX_V];
int vis[MAX_V];
int ednum;
void dijkstra(int s){priority_queue<P,vector<P>,greater<P> > que;fill(d+1,d+V+1,INF);d[s]=0;que.push(P(0,s));while(!que.empty()){P p=que.top();que.pop();int v=p.second;if(d[v]<p.first) continue;for(int i=0;i<G[v].size();i++){edge e=G[v][i];if(d[e.to]>d[v]+e.cost){d[e.to]=d[v]+e.cost;que.push(P(d[e.to],e.to));}}}
}
int main(){
#ifndef ONLINE_JUDGEfreopen("G:/in.txt","r",stdin);//freopen("G:/myout.txt","w",stdout);
#endifint n,m,s;cin>>n>>m>>s;V=n;for(int i=1;i<=m;i++){int u,v,l;cin>>u>>v>>l;G[u].pb((edge){u,v,l,G[v].size(),0});G[v].pb((edge){v,u,l,G[u].size()-1,0});ed[ednum++]=(edge){u,v,l,0,0};}cin>>dis;dijkstra(s);//dij求出最短路for(int i=1;i<=n;i++)if(d[i]==dis) cnt++;//顶点上的个数for(int i=0;i<ednum;i++){int fr=ed[i].from;int to=ed[i].to;int cost=ed[i].cost;bool flag=false;if(d[fr]<dis){if(d[fr]+ed[i].cost>dis){if(d[to]+ed[i].cost-(dis-d[fr])>dis){//保证这端是最短路cnt++;}else if(d[to]+ed[i].cost-(dis-d[fr])==dis){flag=true;//点重合cnt++;}}}if(d[to]<dis){if(!flag){//点不重合的时候才算另外一个顶点if(d[fr]+ed[i].cost-(dis-d[to])>dis){cnt++;}}}}cout<<cnt<<endl;
}

CF 144D 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. Codeforces 144D: Missile Silos

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

  4. codeforces 144D Missile Silos spfa

    题意:给定一张地图,可以在边和点上设立发射井,其中发射井到首都的距离必须等于l 做法:十万个点,竟然可以求最短路,而且最后时间还只有区区125ms.可能是边太少的原因... 图中的边可以分成两类,一种 ...

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

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

  6. codeforces144——D. Missile Silos(最短路+枚举)

    codeforces144--D. Missile Silos 原题链接 题意: 给定一个n点m边的无向图,给定起点,求和起点最短距离为l的点有多少个(可以是点也可以在边上) 思路: 首先求一遍最短路 ...

  7. CF144D Missile Silos 解题报告 *

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

  8. Missile Silos CodeForces - 144D

    原题链接 考察:dijkstra 思路: 可以证明一定不存在dist[u]+w1(w1>w/2) = d(该点离v更近.)的情况. #include <iostream> #incl ...

  9. 模拟电子技术实验指导书

    前             言 本书是根据当前本科.大专.高职.高专等各类学校的电子技术教学和实验的需要,结合我公司生产的RTDZ系列电子技术实验装置的性能.指标编写而成,与我公司的产品配套使用,不做 ...

最新文章

  1. Centos和Redhat的区别和联系
  2. 智源-AI Time 5 | 无人驾驶距离我们还有多远?(活动报名)
  3. JHipster生成微服务架构的应用栈(三)- 业务微服务示例
  4. RouterOS双线进行IP分流上网
  5. c语言箭头指针的作用,C语言中,结构体成员变量的点和箭头
  6. BZOJ1911 特别行动队
  7. 定时跑视图往另外一张表添加数据_程序猿删库跑路示例
  8. 攻克机器学习硕士学位,我的那些年与必备技能!
  9. swagger测试上传图片报错
  10. source insight设置Courier new字体
  11. cudaMemcpy的性能问题
  12. 线上IIS应用程序池自动关闭
  13. 博图(博途)V14编译成功,但仿真无法弹出下载程序窗口/不弹框
  14. 江苏省计算机二级cpp试题,2017年计算机二级C++考试试题
  15. MATLAB机器人工作空间三轴机器人scara
  16. EffNet图像分类--分类精子图片优化!
  17. vi命令下编辑文件时,按insert键文件底部无法编辑
  18. orign绘制双排Stack Column
  19. Service starting has been prevented by iaware or trustsbase sInfo ServiceInfo 解决方法
  20. 数理统计之 置信区间(置信度)

热门文章

  1. 数据仓库架构设计的一点概念
  2. unity性能优化小技巧【一】
  3. 将句子反输java_一句话反转,说个一句话反转的故事
  4. 迅雷看看的带宽限制 是不能限制 还是不想限制?
  5. VideoScribe卡死解决方案
  6. #Z0424. 树上的旅行
  7. JAVA代码操作HDFS
  8. 区块链是怎么保证可信的?附:一张图看懂区块链
  9. 合并分支实战(A合并到 B,然后 B再合并到A减少冲突)
  10. Python数据可视化:如何选择合适的图表可视化?(基础篇—1)