CF 144D Missile Silos [最短路+想法]
题意:
给出一张图和图上的一个顶点,求距离这个点距离为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 [最短路+想法]相关推荐
- codeforces 144D Missile Silos(最短路)
转载请注明出处: http://www.cnblogs.com/fraud/ --by fraud Missile Silos A country called Berland c ...
- Codeforces 144D. Missile Silos 最短路
D. Missile Silos time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Codeforces 144D: Missile Silos
链接:http://codeforces.com/problemset/problem/144/D 题意:题目给你一个无向边权图,然后给你一个点s,和长度l,问距离点s长度为l的点有多少,这些点可以在 ...
- codeforces 144D Missile Silos spfa
题意:给定一张地图,可以在边和点上设立发射井,其中发射井到首都的距离必须等于l 做法:十万个点,竟然可以求最短路,而且最后时间还只有区区125ms.可能是边太少的原因... 图中的边可以分成两类,一种 ...
- 【CodeForces - 144D】Missile Silos(单源最短路,枚举中间边,枚举情况可能性)
题干: A country called Berland consists of n cities, numbered with integer numbers from 1to n. Some of ...
- codeforces144——D. Missile Silos(最短路+枚举)
codeforces144--D. Missile Silos 原题链接 题意: 给定一个n点m边的无向图,给定起点,求和起点最短距离为l的点有多少个(可以是点也可以在边上) 思路: 首先求一遍最短路 ...
- CF144D Missile Silos 解题报告 *
CF144D Missile Silos 解题报告 1 题目链接 https://codeforces.com/problemset/problem/144/D 2 题目整理 题目 : 导弹发射井 题 ...
- Missile Silos CodeForces - 144D
原题链接 考察:dijkstra 思路: 可以证明一定不存在dist[u]+w1(w1>w/2) = d(该点离v更近.)的情况. #include <iostream> #incl ...
- 模拟电子技术实验指导书
前 言 本书是根据当前本科.大专.高职.高专等各类学校的电子技术教学和实验的需要,结合我公司生产的RTDZ系列电子技术实验装置的性能.指标编写而成,与我公司的产品配套使用,不做 ...
最新文章
- Centos和Redhat的区别和联系
- 智源-AI Time 5 | 无人驾驶距离我们还有多远?(活动报名)
- JHipster生成微服务架构的应用栈(三)- 业务微服务示例
- RouterOS双线进行IP分流上网
- c语言箭头指针的作用,C语言中,结构体成员变量的点和箭头
- BZOJ1911 特别行动队
- 定时跑视图往另外一张表添加数据_程序猿删库跑路示例
- 攻克机器学习硕士学位,我的那些年与必备技能!
- swagger测试上传图片报错
- source insight设置Courier new字体
- cudaMemcpy的性能问题
- 线上IIS应用程序池自动关闭
- 博图(博途)V14编译成功,但仿真无法弹出下载程序窗口/不弹框
- 江苏省计算机二级cpp试题,2017年计算机二级C++考试试题
- MATLAB机器人工作空间三轴机器人scara
- EffNet图像分类--分类精子图片优化!
- vi命令下编辑文件时,按insert键文件底部无法编辑
- orign绘制双排Stack Column
- Service starting has been prevented by iaware or trustsbase sInfo ServiceInfo 解决方法
- 数理统计之 置信区间(置信度)