题意:

删除一条边后,求最短路中最长的那个(敌人搞破坏).

思路:

如果你是敌人你肯定删除最短路上的边,删除别的边最短路的值是不会变的,所以直接枚举最短路上的边去删除,取得最大的就行了...

#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 + 枚举最短路上的边相关推荐

  1. HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)...

    http://acm.hdu.edu.cn/showproblem.php?pid=3986 题意: 从起点1 到 终点n,删除图中任意一条边求最短路的最坏情况. n  --表示有n个点 m --边数 ...

  2. 【图论】最短路上的统计(ssl 1500)

    最短路上的统计 ssl 1500 题目大意: 求一个图中,从a到b的所有最短路所经过的点数之和 原题: 题目描述 一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b ...

  3. 图论500题 ---- 枚举(最短路上的边)+最短路 删掉任意一条边的最长最短路 HDU1595

    题目链接 题目大意: 有一城市,这个城市有nnn个地点和mmm条连接他们的路,点的编号是从111到nnn,小X住在111,他想去nnn. 但是最近正在维修公路,也就是说这mmm条路有且只有一条是坏的, ...

  4. 【2015-2016 ACM-ICPC NERC】【F Froggy Ford】【最小生成树】【最短路】【思维好题】【往河中添加一块石头,使得最短路上最大距离最小】

    [题意] 往河中添加一块石头,使得最短路上最大距离最小 [思路] 枚举两个端点,那么某条路的最短路径上的最大距离就是max(dis1[i],dis2[j],dis[i][j]),建立两个虚源模仿最小生 ...

  5. 最短路上的统计(Floyd)

    Description 一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b之间所有最短路上的点的总个数输出. Input 第一行n,m,表示n个点,m条边 接下来m ...

  6. Codeforces 1741G 最短路上状压dp

    题意: 有 n n n个地方,他们被 m m m条道路相连.有一天, t o t tot tot个人在 1 1 1处开派对,开完派对他们要回家,他们回家只会走最短路径,其中有 k ( k ≤ 6 ) ...

  7. CF715B. Complete The Graph

    CF715B. Complete The Graph 题意: 给一张 n 个点,m 条边的无向图,要求设定一些边的边权 使得所有边权都是正整数,最终 S 到 T 的最短路为 L 1 ≤ n ≤ 100 ...

  8. nssl1167-桐人的约会【最短路】

    正题 题目大意 去掉一条边使得最短路最长. 解题思路 这条边一定在最短路上而最短路最多只有n−1n-1n−1条边,所以直接枚举最短路上的边.复杂度O(nmK)O(nmK)O(nmK) codecode ...

  9. 图论复习(各类习题)

    可以结合这篇博客进行复习:http://www.cnblogs.com/z360/p/7363034.html 一.强连通分量.缩点 习题: 洛谷--P2746 [USACO5.3]校园网Networ ...

最新文章

  1. [deviceone开发]-组件功能演示示例
  2. EBioMedicine:西湖大学郑钜圣组-乳制品摄入与肠道微生态、心血管代谢健康的关系...
  3. 20165239其米仁增3
  4. NetDevOps — 华为设备命令汇总
  5. pyglet and opengl -- 纹理映射以及动画
  6. AcDream 1079 郭氏数
  7. 电脑上微信怎么多开?
  8. 【Python基础】快速提升效率的6个pandas使用小技巧
  9. xmpp muc 群聊协议 3
  10. 程序员如何跟领导提离职_员工辞职不交接工作被领导怒怼:我不批离职,跟你耗着,结果蒙了...
  11. F6-预编译编译安装
  12. 无监督学习之稀疏编码,自编码
  13. Linux日志管理工具 journalctl
  14. 2G维码器-以及4G维码器--基于合宙air202 air720sl luat
  15. Android - BGAQRCode 扫描二维码生成二维码
  16. mysql数据库有什么应用场景_科普:云数据库MySQL的几种应用场景
  17. 2021-04-13
  18. 31-三色旗问题(荷兰国旗问题)
  19. 学会php想转学java好学吗_Java和PHP哪个好学
  20. 22个无版权限制的高清无码图库站

热门文章

  1. day26 re正则表达式
  2. 输入和学生成绩的输出
  3. 优秀简历要遵循哪些规则
  4. JAVA命令运行cmd命令得到的结果乱码Runtime.getRuntime().exec();
  5. Android 阻隔返回键
  6. 原创:Docker在云家政的应用 谢绝复制粘贴内容
  7. iOS证书申请详细流程
  8. 第七讲:数据契约(2)
  9. Mysql-linux下密码修改,忘记密码修改,超级管理用户修改
  10. Oracle11g R2学习系列 之六数据库链接,快照及序列