CF 144D Missile Silos [最短路+想法]
来源:互联网 发布:如何挑选电视机知乎 编辑:程序博客网 时间:2024/05/25 05:36
题意:
给出一张图和图上的一个顶点,求距离这个点距离为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_backusing 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;}
0 0
- CF 144D Missile Silos [最短路+想法]
- Codeforces 144D. Missile Silos 最短路
- codeforces 144 D. Missile Silos 最短路
- Codeforces 144D Missile Silos(SPFA最短路)
- Codeforces 144 D Missile Silos【最短路SPFA+枚举】
- Codeforces 144D: Missile Silos
- Codeforces 144D Missile Silos
- CF144D Missile Silos SPFA最短路
- Codeforces Round #103 (Div. 2)---D. Missile Silos(最短路+枚举边)
- codeforces 144D Missile Silos spfa
- Codeforces 144D. Missile Silos【dijkstra】
- codeforces D. Missile Silos
- 144D Missile Silos (data structures, graphs, shortest paths)
- cf 442 div2 D bfs最短路
- CF 96D Volleyball(最短路套最短路)
- Codeforces Round #103 (Div. 2) D. Missile Silos(spfa + 枚举边)
- CF-30 D - King's Problem?(枚举+最短路)
- CF #302 Div2 D Destroying Roads(最短路)
- R自带数据包(datasets)
- GPIO的几种配置模式
- Java模拟 双分派(Double Dispatch)
- hdu 4909 String(map)
- Android Http协议[Get和Post]详解
- CF 144D Missile Silos [最短路+想法]
- MySQL索引背后的数据结构及算法原理(经典)
- 希尔排序
- R语言之常用函数
- C++之标准IO
- 第二十六周工作总结
- iOS -- 常用的数字匹配正则表达式
- poj 1128 Frame Stacking
- string类 string.h头文件 cstring头文件区别以及读取一行字符串总结