题意:

给出一张图和图上的一个顶点,求距离这个点距离为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. pandas使用groupby函数计算dataframe每个分组对应的数据行的个数(size of each group in dataframe, rows count of group)
  2. python读取html_从零开始的Python爬虫教程(一):获取HTML文档
  3. VC Ws2_32.lib
  4. 《linux c编程指南》学习手记4
  5. 如何查看软连接,以及相关注意事项
  6. secureCRT使用退格键(backspace)出现^H解决的方法
  7. Rtaudio在VS下的使用
  8. list怎么取数据_MongoDB 自动过滤重复数据
  9. 设计模式之“单例模式”
  10. vim配置运行python3快捷键_Linux VIM8 Python3 编辑器配置文件
  11. 真实的网络赚钱经历:另类推广引流操作CPA!
  12. 【金融计量学】面板数据(自用笔记,第一次写)
  13. 【ruby】ruby图像处理模块“mini_magick”
  14. 计算机基础ps变换蝴蝶,在PS中用自由变换制作飞舞的蝴蝶和用内容识别比例缩放的操作过程...
  15. Podman 容器 pod 管理工具
  16. Chapter 1 (Linear Equations in Linear Algebra): System of linear equations (线性方程组)
  17. 虚拟化在防泄密领域的缺点
  18. 算符优先分析法-java实现
  19. ubuntu加入widdows启动
  20. 【FCC】Build a Tribute Page(html+css+bootstrap)

热门文章

  1. Java字符串中分隔符的字符串和数组的转换
  2. springboot升级log4j2,解决漏洞问题
  3. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(七)Ability的信息传递等
  4. [C] int转string
  5. Python中设置横坐标间距,进行绘图
  6. Excel Aspose.Cells设置百分比
  7. leetcode刷题笔记——剑指offer(二)[回溯、排序、位运算、数学、字符串]
  8. 关于pin码破解的原理和reaver参数的解释
  9. 【腾讯TMQ】30分钟轻松搞定代码瘦身
  10. c语言德•摩根定律编程,【程序中的数学】利用德摩根定律简化布尔运算