hdu3986 spfa + 枚举最短路上的边
题意:
删除一条边后,求最短路中最长的那个(敌人搞破坏).
思路:
如果你是敌人你肯定删除最短路上的边,删除别的边最短路的值是不会变的,所以直接枚举最短路上的边去删除,取得最大的就行了...
#include<stdio.h>
#include<string.h>
#include<queue>
#define N_node 1005
#define N_eage 110000
#define inf 1000000000
using namespace std;
typedef struct
{
int from ,to ,next ,cost;
}STAR;
STAR E[N_eage];
int list[N_node] ,tot;
int mer[N_eage] ,s_x[N_node];
void add(int a ,int b ,int c)
{
E[++tot].from = a;
E[tot].to = b;
E[tot].cost = c;
E[tot].next = list[a];
list[a] = tot;
}
void spfa(int s ,int n ,int key)
{
int mark_q[N_node] = {0};
mark_q[s] = 1;
for(int i = 0 ;i <= n ;i ++)
s_x[i] = inf;
s_x[s] = 0;
queue<int>q;
q.push(s);
if(key == -1)
memset(mer ,255 ,sizeof(mer));
while(!q.empty())
{
int xin ,tou;
tou = q.front();
q.pop();
mark_q[tou] = 0;
for(int k = list[tou] ;k ;k = E[k].next)
{
if(k == key) continue;
xin = E[k].to;
if(s_x[xin] > s_x[tou] + E[k].cost)
{
s_x[xin] = s_x[tou] + E[k].cost;
if(key == -1) mer[xin] = k;
if(!mark_q[xin])
{
mark_q[xin] = 1;
q.push(xin);
}
}
}
}
return ;
}
int main ()
{
int t ,i ,n ,m ,a ,b ,c;
scanf("%d" ,&t);
while(t--)
{
scanf("%d%d" ,&n ,&m);
memset(list ,0 ,sizeof(list));
tot = 1;
while(m--)
{
scanf("%d %d %d" ,&a ,&b ,&c);
add(a ,b ,c);
add(b ,a ,c);
}
int ans = -1;
spfa(1 ,n ,-1);
int kg = 0;
for(i = mer[n] ;i + 1 ;i = mer[E[i].from])
{
spfa(1 ,n ,i);
if(s_x[n] == inf)
{
kg = 1;
break; /*********如果有一个边删除后不连通了,那么敌人肯定毁灭着一条.
}
if(ans < s_x[n] )
ans = s_x[n];
}
if(kg) ans = -1;
printf("%d\n" ,ans);
}
return 0;
}
hdu3986 spfa + 枚举最短路上的边相关推荐
- HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)...
http://acm.hdu.edu.cn/showproblem.php?pid=3986 题意: 从起点1 到 终点n,删除图中任意一条边求最短路的最坏情况. n --表示有n个点 m --边数 ...
- 【图论】最短路上的统计(ssl 1500)
最短路上的统计 ssl 1500 题目大意: 求一个图中,从a到b的所有最短路所经过的点数之和 原题: 题目描述 一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b ...
- 图论500题 ---- 枚举(最短路上的边)+最短路 删掉任意一条边的最长最短路 HDU1595
题目链接 题目大意: 有一城市,这个城市有nnn个地点和mmm条连接他们的路,点的编号是从111到nnn,小X住在111,他想去nnn. 但是最近正在维修公路,也就是说这mmm条路有且只有一条是坏的, ...
- 【2015-2016 ACM-ICPC NERC】【F Froggy Ford】【最小生成树】【最短路】【思维好题】【往河中添加一块石头,使得最短路上最大距离最小】
[题意] 往河中添加一块石头,使得最短路上最大距离最小 [思路] 枚举两个端点,那么某条路的最短路径上的最大距离就是max(dis1[i],dis2[j],dis[i][j]),建立两个虚源模仿最小生 ...
- 最短路上的统计(Floyd)
Description 一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b之间所有最短路上的点的总个数输出. Input 第一行n,m,表示n个点,m条边 接下来m ...
- Codeforces 1741G 最短路上状压dp
题意: 有 n n n个地方,他们被 m m m条道路相连.有一天, t o t tot tot个人在 1 1 1处开派对,开完派对他们要回家,他们回家只会走最短路径,其中有 k ( k ≤ 6 ) ...
- CF715B. Complete The Graph
CF715B. Complete The Graph 题意: 给一张 n 个点,m 条边的无向图,要求设定一些边的边权 使得所有边权都是正整数,最终 S 到 T 的最短路为 L 1 ≤ n ≤ 100 ...
- nssl1167-桐人的约会【最短路】
正题 题目大意 去掉一条边使得最短路最长. 解题思路 这条边一定在最短路上而最短路最多只有n−1n-1n−1条边,所以直接枚举最短路上的边.复杂度O(nmK)O(nmK)O(nmK) codecode ...
- 图论复习(各类习题)
可以结合这篇博客进行复习:http://www.cnblogs.com/z360/p/7363034.html 一.强连通分量.缩点 习题: 洛谷--P2746 [USACO5.3]校园网Networ ...
最新文章
- [deviceone开发]-组件功能演示示例
- EBioMedicine:西湖大学郑钜圣组-乳制品摄入与肠道微生态、心血管代谢健康的关系...
- 20165239其米仁增3
- NetDevOps — 华为设备命令汇总
- pyglet and opengl -- 纹理映射以及动画
- AcDream 1079 郭氏数
- 电脑上微信怎么多开?
- 【Python基础】快速提升效率的6个pandas使用小技巧
- xmpp muc 群聊协议 3
- 程序员如何跟领导提离职_员工辞职不交接工作被领导怒怼:我不批离职,跟你耗着,结果蒙了...
- F6-预编译编译安装
- 无监督学习之稀疏编码,自编码
- Linux日志管理工具 journalctl
- 2G维码器-以及4G维码器--基于合宙air202 air720sl luat
- Android - BGAQRCode 扫描二维码生成二维码
- mysql数据库有什么应用场景_科普:云数据库MySQL的几种应用场景
- 2021-04-13
- 31-三色旗问题(荷兰国旗问题)
- 学会php想转学java好学吗_Java和PHP哪个好学
- 22个无版权限制的高清无码图库站