【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~n的最短路最长
- 求最短路最长是多少
【思路】
- 一定是删最短路上的边
- 可以先跑一个Dijkstra,求出最短路,然n后枚举删边
- 朴素的Dijkstra为n^2,枚举删边(n条)需要的总时间复杂度是n^3
- 堆优化Dijkstra(nlogn),总复杂度为n^2logn
- 有多重边,用邻接矩阵不方便,用邻接表方便,删去的边标记一下就好
【Accepted】
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
typedef long long ll;
const int maxm=5e4*+;
const int maxn=1e3+;
const int inf=0x3f3f3f3f;
int n,m;
struct node
{
int to;
int nxt;
int w;
}e[maxm];
int head[maxn];
int tot;
bool vis[maxn];
int dis[maxn];
int pv[maxn];
int pe[maxn];
typedef pair<int,int> pii;
void init()
{
memset(head,-,sizeof(head));
tot=;
} void add(int u,int v,int w)
{
e[tot].to=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot++;
} int Dij(int x)
{
priority_queue<pii,vector<pii>,greater<pii> >pq;
memset(vis,false,sizeof(vis));
memset(dis,inf,sizeof(dis));
dis[]=;
pq.push(make_pair(dis[],));
// pq.push(pii(dis[1],1));
while(!pq.empty())
{
pii cur=pq.top();
pq.pop();
int u=cur.second;
if(vis[u]) continue;
vis[u]=true;
for(int i=head[u];i!=-;i=e[i].nxt)
{
if(i==x) continue;
int w=e[i].w;
int v=e[i].to;
if(dis[u]+w<dis[v])
{
dis[v]=dis[u]+w;
pq.push(make_pair(dis[v],v));
if(x==-)
{
pv[v]=u;
pe[v]=i;
}
}
}
}
return dis[n];
} int Solve()
{
if(Dij(-)==inf)
{
return -;
}
int ans=;
for(int i=n;i!=;i=pv[i])
{
ans=max(ans,Dij(pe[i]));
if(ans==inf)
{
return -;
}
}
return ans;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
init();
scanf("%d%d",&n,&m);
while(m--)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
int ans=Solve();
printf("%d\n",ans);
}
return ;
}
堆优化的Dijkstra
【Dijstra堆优化】HDU 3986 Harry 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...... 思路:先求出最短路,如果删除的边不是最短路上的,那么对结果没有影响,要有影响,只能删除最短路上的边.所以枚举一下最短路上的 ...
- HDU-6290_奢侈的旅行(Dijstra+堆优化)
奢侈的旅行 Time Limit: 14000/7000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Problem De ...
- hdu 2066 Dijstra 堆优化
嗯 有广搜的意思 #include<cstdio> #include<iostream> #include<queue> #include<vector> ...
- 复习最短路 spfa+dijstra堆优化
题目很简单,, 但是wa了三次,, 用<vector>之前一定要记得clear()...简单说下 spfa的问题 和bell_forman有点类似 每次取出一个点 然后更新 并把更新了的节 ...
- hdu3986Harry Potter and the Final Battle
给你一个无向图,然后找出当中的最短路, 除去最短路中的随意一条边,看最糟糕的情况下, 新的图中,第一个点到末点的最短路长度是多少. 我的做法是: 首先找出最短路,然后记录路径, 再一条一条边的删, 删 ...
- 最短路-朴素版Dijkstra算法&堆优化版的Dijkstra
朴素版Dijkstra 目标 找到从一个点到其他点的最短距离 思路 ①初始化距离dist数组,将起点dist距离设为0,其他点的距离设为无穷(就是很大的值) ②for循环遍历n次,每层循环里找出不在S ...
- hdu 3986(最短路变形好题)
Harry Potter and the Final Battle Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/6553 ...
- 堆优化dijstra
因为spfa没事就被卡一卡,所以堆优化dijstra就显得很重要,在最短路或者其模型里边,最少有一条边是没有被更新过的,也就是它是最短的,同理从这个点开始也有一条边最短,所以每次就找最短的然后松弛操作 ...
随机推荐
- window上安装MySQL
一.安装MySQL 1.1 下载解压缩版的安装包,解压,然后配置环境变量 PATH=.......;D:\Program Files (x86)\mysql-5.5.27-win32\bin (注意是 ...
- idea使用Git提交代码时忽略指定文件或文件夹
简述 使用idea编写代码并使用git作为版本控制器的时候,常常不需要提交配置文件以及一些其他不需要提交的文件,可以使用.ignore插件来在上传的时候忽略一些文件或文件夹. 安装 注意:安装完成之后 ...
- C/S WinForm自动升级
这二天刚好完成一个C/S 自动升级的功能 代码分享一下 /// <summary> /// 版本检测 /// </summary> public class ...
- spring mvc URL忽略大小写
@Configuration public class SpringWebConfig extends WebMvcConfigurationSupport { @Override public vo ...
- AJPFX总结List的三个子类的特点
ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高. ...
- AndroidStudio碰到的各种问题
源码已经下载了,但是为毛关联不了? 我的源码默认是下载在Sdk\sources\android-23\目录下面的,以前开发的时候都是自动关联的,今天碰到了怎么刷新,怎么关联都不行. 解决方式为: 1. ...
- LOJ#121. 「离线可过」动态图连通性(线段树分治)
题意 板子题,题意很清楚吧.. Sol 很显然可以直接上LCT.. 但是这题允许离线,于是就有了一个非常巧妙的离线的做法,好像叫什么线段树分治?? 此题中每条边出现的位置都可以看做是一段区间. 我们用 ...
- ASP.NET MVC IIS7 403.14-Forbidden
问题描述 IIS 7上发布ASP.NET MVC程序报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 折腾了半天,提示里面的解决方法是: 如果不希望启用目录浏览,请确保 ...
- JDBC性能优化篇
系统性能. 少用Metadata方法 与其它的JDBC方法相比, 由ResultSet对象生成的metadata对象的相对来说是很慢的. 应用程序应该缓存从ResultSet返回的metada ...
- virtualbox没有64位选项
今天安装的virtualbox想安装一下sql server 测试一下 在安装系统的时候发现没有64位系统的选项,在网上找了一下 发现是 在BIOS里面有一个选项没有开启, 是 Intel virt ...