HLJUOJ1144(Dijkstra模板应用)
来源:互联网 发布:wemall商业版java源码 编辑:程序博客网 时间:2024/05/29 13:21
1144: D.Cross the middle
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 36 Solved: 13
[Submit][Status][Web Board]
Description
n个点的图,给出任意两点之间的距离,m个询问,每次询问Mid是否可能出现在从Start到End的最短路径上。
Input
第一行n,m
接下来是一个n*n的邻接矩阵,w[i][j]表示i到j的距离
接下来m行
每行start,end,mid
N,m<=100,w[i][j]<=100
Output
每个询问对应一行输出
如果可能出现输出Yes,否则No
Sample Input
3 20 1 11 0 11 1 01 2 31 3 2
Sample Output
NoNo
解题思路:
a到b最短路如果中间路过mind,那么a到mnind的最短路 + mind到b的最短路 == a 到 b的最短路,模板应用,数据小,大的话可以卡下Floyd
完整代码:
#include <functional>#include <algorithm>#include <iostream>#include <fstream>#include <sstream>#include <iomanip>#include <numeric>#include <cstring>#include <climits>#include <cassert>#include <complex>#include <cstdio>#include <string>#include <vector>#include <bitset>#include <queue>#include <stack>#include <cmath>#include <ctime>#include <list>#include <set>#include <map>using namespace std;#pragma comment(linker, "/STACK:102400000,102400000")typedef long long LL;typedef double DB;typedef unsigned uint;typedef unsigned long long uLL;/** Constant List .. **/ //{const int MOD = int(1e9)+7;const int INF = 0x3f3f3f3f;const LL INFF = 0x3f3f3f3f3f3f3f3fLL;const DB EPS = 1e-9;const DB OO = 1e20;const DB PI = acos(-1.0); //M_PI;int n , m;const int maxn = 1111;int maps[maxn][maxn];int vis[maxn] , dis[maxn];int dijkstra(int x , int y){ int i , k , minn; for(i = 1 ; i <= n ; i ++) { vis[i] = 0; dis[i] = maps[x][i]; } vis[x] = 1; do{ minn = INF; k = 0; for(i = 1 ; i <= n ; i ++) { if(vis[i] == 0 && dis[i] < minn) { minn = dis[i]; k = i; } } if(k) { vis[k] = 1; for(i = 1; i <= n ; i ++) { if(maps[k][i] < INF && minn + maps[k][i] < dis[i]) { dis[i] = minn + maps[k][i]; } } } }while(k); return dis[y];}int main(){ #ifdef DoubleQ freopen("in.txt","r",stdin); #endif while(~scanf("%d%d",&n,&m)) { for(int i = 1 ; i <= n ; i ++) { for(int j = 1 ; j <= n ; j ++) { scanf("%d",&maps[i][j]); } } while(m--) { int s , e , mind; scanf("%d%d%d",&s , &e , &mind); int cnt1 = dijkstra(s , mind); int cnt2 = dijkstra(mind , e); int sum = dijkstra(s , e); if(cnt1 + cnt2 == sum) printf("Yes\n"); else printf("No\n"); } }}
0 0
- HLJUOJ1144(Dijkstra模板应用)
- Dijkstra模板(邻接矩阵)
- Dijkstra模板(优先队列)
- Dijkstra(迪杰斯特拉)算法模板
- dijkstra 模板
- dijkstra 模板
- Dijkstra模板
- dijkstra模板
- dijkstra模板
- Dijkstra模板
- (Dijkstra模板)
- Dijkstra模板
- Dijkstra模板
- Dijkstra 模板
- Dijkstra模板
- dijkstra 模板
- dijkstra模板
- dijkstra模板
- API - jQuery之操作cookie
- XML概述
- 自定义属性TypedArray
- 【VS2013】windows多线程编程_并行评测
- js中encodeURI与python中urllib.quote对应
- HLJUOJ1144(Dijkstra模板应用)
- Python对象的浅拷贝和深拷贝
- hash 在 perl 中的用法
- 8642 快速排序
- 玩转WMI --- 用脚本获取硬盘传感器温度和SMART讯息
- MyEclipse编辑PHP总结
- JS中showModalDialog 详细使用
- tyvj1117拯救ice-cream&&nyoj284坦克大战
- 写在项目即将收官时的反思