hdu3986Harry Potter and the Final Battle
给你一个无向图,然后找出当中的最短路,
除去最短路中的随意一条边,看最糟糕的情况下,
新的图中,第一个点到末点的最短路长度是多少。
我的做法是:
首先找出最短路,然后记录路径,
再一条一条边的删,
删一条算一下最短路长度,
之后恢复这条边,删掉下一条边继续算,
以此类推。
看之中最糟糕的情况下,最短路长度是多少,
假设是无穷大则代表最坏情况为不通,按题意输出-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的更多相关文章
- 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 ...
- hdu 3986 Harry Potter and the Final Battle
一个水题WA了60发,数组没开大,这OJ也不提示RE,光提示WA...... 思路:先求出最短路,如果删除的边不是最短路上的,那么对结果没有影响,要有影响,只能删除最短路上的边.所以枚举一下最短路上的 ...
- 【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 ...
- Bridges: The Final Battle
对修改操作按时间分治,设$solve(l,r,n,m)$为考虑时间在$[l,r]$的修改操作,作用范围是$n$个点,$m$条边的图. 若$l=r$,则暴力Tarjan统计桥边个数即可. 否则提取出$[ ...
- [JZOJ6089]【CodeChef 2014 April Challenge】Final Battle of Chef【数据结构】【整体二分】
Description \(n,q,V\leq 100000,w_i\leq 10^9\) Solution 又是一道大数据结构 由于有一个下取整,这就导致了不同时间的修改值是不能简单的直接加在一起的 ...
- 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 ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 枚举最短路径+SPFA
Harry Potter and the Final Battle Submit Status Description The final battle is coming. Now Harry Po ...
随机推荐
- Ubuntu服务器上SSH Server 的安装和设置
网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: ...
- 雅虎UED--无障碍网页设计
转自:http://www.sharetk.com/html/ued/Interactive-Design/1394.html 随着web使用量的增加和人们网络意识的增强,一些特殊用户开始被我们所关注 ...
- 翻转句子中单词的顺序 C语言
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开. 为简单起见,标点符号和普通字母一样处理. 比如将"I am a student"转化为&q ...
- java里,当long与上了int
long switchState = 0xf0000000000L; int result = (switchState & 0xff00000000L) > 0 ? 0x01 : 0x ...
- 基于SOAP的xml网络交互心得
感谢小二同学将遇到的问题分享给我们,再此给以掌声.如果看不懂下面文章的建议查找一下HTTP协议的文艺,对HTTP协议要有个概念. XML网络交互心得 目录 一. xml解析 1.根路径下 2. ...
- C++算术运算符与算术表达式
基本的算术运算符 在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍. 常见算数运算符 运算符 说明 举例 + 加法运算符,或正值 ...
- Steve Yegge:Google面试秘籍
我憋了很长时间想写点关于去Google面试的秘籍.不过我总是推迟,因为写出来的东西会让你抓狂.很可能是这样.如果按统计规律来定义"你"的话,这文章很可能让你不爽. 为啥呢?因为啊- ...
- python读取文件内容方法
1) readline 每次读一行,返回序列 2) readlines 一次全部读出,返回序列 3) numpy 的genfromtxt,返回为np的矩阵格式 import numpy as np f ...
- VS2013 Qt5 Mysql中文编码问题
Qt开始默认是utf-8,而VS2013默认程序编码为gb2312: 这样就会发现使用中文的时候乱码. 一般有二种解决方案: 1.在使用中文的时候,使用QTextCodec QTextCodec *g ...
- android wifi讲解 wifi列表显示
1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这 ...