给你一个无向图,然后找出当中的最短路,

除去最短路中的随意一条边,看最糟糕的情况下,

新的图中,第一个点到末点的最短路长度是多少。

我的做法是:

首先找出最短路,然后记录路径,

再一条一条边的删,

删一条算一下最短路长度,

之后恢复这条边,删掉下一条边继续算,

以此类推。

看之中最糟糕的情况下,最短路长度是多少,

假设是无穷大则代表最坏情况为不通,按题意输出-1就可以,

否则输出最坏情况下,最短路长度。

我用spfa和链式向前星做的,

代码例如以下:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
bool flag;
int exp,num_dot,num_side,cnt,pd[1010],ps[1010],die[100010],dis[1010],box[1010];
struct node
{
int to,next,w,co;
}side[100010];
void add(int from,int to,int w)
{
side[cnt].to=to;
side[cnt].w=w;
side[cnt].next=box[from];
box[from]=cnt++;
}
void init()
{
int s,e,w;
cnt=0;
flag=1;
memset(box,-1,sizeof(box));
memset(die,0,sizeof(die));
scanf("%d%d",&num_dot,&num_side);
for(int i=0;i<num_side;i++)
{
scanf("%d%d%d",&s,&e,&w);
side[cnt].co=cnt+1;
add(s,e,w);
side[cnt].co=cnt-1;
add(e,s,w);
}
}
void spfa()
{
int mid;
bool iq[1010];
queue<int>qq;
memset(iq,0,sizeof(iq));
memset(dis,127,sizeof(dis));
dis[1]=0;
qq.push(1);
iq[1]=1;
while(qq.size())
{
mid=qq.front();
qq.pop();
iq[mid]=0;
for(int i=box[mid];i>-1;i=side[i].next)
if(die[i]==0&&dis[side[i].to]>dis[mid]+side[i].w)
{
dis[side[i].to]=dis[mid]+side[i].w;
if(flag)
{
pd[side[i].to]=mid;
ps[side[i].to]=i;
}
if(!iq[side[i].to])
{
iq[side[i].to]=1;
qq.push(side[i].to);
}
}
}
flag=0;
}
int main()
{
int ans;
scanf("%d",&exp);
while(exp--)
{
init();
spfa();
if(dis[num_dot]>50000000)
printf("-1\n");
else
{
ans=0;
for(int i=num_dot;i>1;i=pd[i])
{
die[ps[i]]=1;
die[side[ps[i]].co]=1;
spfa();
ans=max(ans,dis[num_dot]);
die[ps[i]]=0;
die[side[ps[i]].co]=0;
}
if(ans>50000000)
printf("-1\n");
else
printf("%d\n",ans);
}
}
}

hdu3986Harry Potter and the Final Battle的更多相关文章

  1. hdu 3986 Harry Potter and the Final Battle (最短路径)

    Harry Potter and the Final Battle Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/6553 ...

  2. hdu 3986 Harry Potter and the Final Battle

    一个水题WA了60发,数组没开大,这OJ也不提示RE,光提示WA...... 思路:先求出最短路,如果删除的边不是最短路上的,那么对结果没有影响,要有影响,只能删除最短路上的边.所以枚举一下最短路上的 ...

  3. 【Dijstra堆优化】HDU 3986 Harry Potter and the Final Battle

    http://acm.hdu.edu.cn/showproblem.php?pid=3986 [题意] 给定一个有重边的无向图,T=20,n<=1000,m<=5000 删去一条边,使得1 ...

  4. Bridges: The Final Battle

    对修改操作按时间分治,设$solve(l,r,n,m)$为考虑时间在$[l,r]$的修改操作,作用范围是$n$个点,$m$条边的图. 若$l=r$,则暴力Tarjan统计桥边个数即可. 否则提取出$[ ...

  5. [JZOJ6089]【CodeChef 2014 April Challenge】Final Battle of Chef【数据结构】【整体二分】

    Description \(n,q,V\leq 100000,w_i\leq 10^9\) Solution 又是一道大数据结构 由于有一个下取整,这就导致了不同时间的修改值是不能简单的直接加在一起的 ...

  6. Final Battle #1 K题 Fire game

    Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows ...

  7. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  8. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  9. 枚举最短路径+SPFA

    Harry Potter and the Final Battle Submit Status Description The final battle is coming. Now Harry Po ...

随机推荐

  1. CCIE路由实验(3) -- BGP高级部分

    当一个AS包含多个IBGP对等体时,路由反射器非常有用.因为IBGP客户只需要和路由反射器建立邻居关系,从而降低了IBGP的连接数量.路由反射器和它的客户合称为一个簇.路由反射是克服IBGP水平分割的 ...

  2. 基于visual Studio2013解决C语言竞赛题之0414特殊平方数

       题目 解决代码及点评 这道题依旧是通过for循环,遍历所有四位数,然后根据题目要求判断数的性质即可 /**************************************** ...

  3. Menu的自己定义实现-------保卫萝卜造塔升级塔菜单实现

    cocos2dx原生的menu排版函数实现的非常无完整,像最主要的Item的排序要想做得略微美丽一些就须要我们自己实现. 对于Menu我们能够用两种方法来实现: 1.大神级别. 继承自Control, ...

  4. C#后台代码编写图片地址Properties.Resources._1;

    if (i == 0)            {                pictureBox1.Image = Properties.Resources._1;                ...

  5. iOS 7 - Auto Layout on iOS Versions prior to 6.0

    链接地址:http://stackoverflow.com/questions/18735847/ios-7-auto-layout-on-ios-versions-prior-to-6-0 Stac ...

  6. BZOJ 2212: [Poi2011]Tree Rotations( 线段树 )

    线段树的合并..对于一个点x, 我们只需考虑是否需要交换左右儿子, 递归处理左右儿子. #include<bits/stdc++.h> using namespace std; #defi ...

  7. C/C++迭代器使用具体解释

    迭代器是一种检查容器内元素并遍历元素的数据类型.能够替代下标訪问vector对象的元素. 每种容器类型都定义了自己的迭代器类型,如 vector: vector<int>::iterato ...

  8. K&amp;R练习题6-1统计关键词出现的次数

    这道练习题训练了: 1.结构体数组 2.二分查找 3.指针操作 ---- 都不难.但非常基础,我认为非常好,做完了记到博客上来,题目见k&R,实现例如以下: /* * Practice of ...

  9. PHP - 使用 Pear 进行安装和卸载包

    安装: 首先运行到php根目录: 输入要安装的包文件名: 使用语法: pear install 要安装包的名称 回车确认: 如果没有其他意外,显示安装成功. 查看安装的包的信息: 语句: pear i ...

  10. Java基础12 类型转换与多态

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/01/2992662.html 作者:Vamei 出处:http://www.cnblogs.com ...