hdu 3986 Harry Potter and the Final Battle (最短路径)
Harry Potter and the Final Battle
Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2118 Accepted Submission(s): 580
Then for each case: an integer n (2<=n<=1000) means the number of city in the magical world, the cities are numbered from 1 to n. Then an integer m means the roads in the magical world, m (0< m <=50000). Following m lines, each line with three integer u, v, w (u != v,1 <=u, v<=n, 1<=w <1000), separated by a single space. It means there is a bidirectional road between u and v with the cost of time w. There may be multiple roads between two cities.
4
2
2
-1
2
//453MS 3616K 2184 B G++
/* 题意:
给出n个点,m条边的图,可去掉其中任意一条边,求最坏情况下 点1到点n 的最短路径 最短路径:
先一次spfa求出最短路,然后保存路径,保存路径后遍历该路径,从而求解 */
#include<iostream>
#include<vector>
#include<queue>
#define inf 0x7ffffff
#define N 1005
using namespace std;
struct node{
int v,w,id; //id记录其为第几条边
node(int a,int b,int c){
v=a;w=b;id=c;
}
};
int d[N],q[N],path[N]; //q[i]记录最短路中第i个点用到的边,path记录最短路径
bool vis[N],pre[*N]; //pre[i]将第i条边暂时隐去
int n,m;
vector<node>V[N];
bool flag; //求最短路与遍历最短路的开关
void spfa()
{
queue<int>Q;
memset(vis,false,sizeof(vis));
for(int i=;i<=n;i++) d[i]=inf;
d[]=;
vis[]=true;
Q.push();
while(!Q.empty()){
int u=Q.front();
Q.pop();
vis[u]=false;
int n0=V[u].size();
for(int i=;i<n0;i++){
int v=V[u][i].v;
int w=V[u][i].w;
int id=V[u][i].id;
if(pre[id]) continue; //如果遍历到此边跳过
if(d[v]>d[u]+w){
d[v]=d[u]+w;
if(flag){
path[v]=u; q[v]=id;
}
if(!vis[v]){
Q.push(v);
vis[v]=true;
}
}
}
}
}
int main(void)
{
int t;
int a,b,c;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) V[i].clear();
for(int i=;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
a--;b--;
V[a].push_back(node(b,c,i));
V[b].push_back(node(a,c,i));
}
flag=true;
memset(pre,false,sizeof(pre));
spfa();
flag=false;
if(d[n-]==inf){
puts("-1");continue;
}
int ans=inf;
bool tflag=true;
for(int i=n-;i!=;i=path[i]){
pre[q[i]]=true; //最短路边的开关
spfa();
pre[q[i]]=false;
if(d[n-]==inf){
ans=inf;break;
}
if(tflag){
ans=d[n-]; tflag=false;
}else ans=max(ans,d[n-]);
}
if(ans==inf) puts("-1");
else printf("%d\n",ans);
}
return ;
}
hdu 3986 Harry Potter and the Final Battle (最短路径)的更多相关文章
- 【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 ...
- hdu 3986 Harry Potter and the Final Battle
一个水题WA了60发,数组没开大,这OJ也不提示RE,光提示WA...... 思路:先求出最短路,如果删除的边不是最短路上的,那么对结果没有影响,要有影响,只能删除最短路上的边.所以枚举一下最短路上的 ...
- hdu3986Harry Potter and the Final Battle
给你一个无向图,然后找出当中的最短路, 除去最短路中的随意一条边,看最糟糕的情况下, 新的图中,第一个点到末点的最短路长度是多少. 我的做法是: 首先找出最短路,然后记录路径, 再一条一条边的删, 删 ...
- hdu 3986(最短路变形好题)
Harry Potter and the Final Battle Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/6553 ...
- HDU 3988 Harry Potter and the Hide Story(数论-整数和素数)
Harry Potter and the Hide Story Problem Description iSea is tired of writing the story of Harry Pott ...
- HDU 3986
http://acm.hdu.edu.cn/showproblem.php?pid=3986 从开始的最短路里依次删一条边,求新的最短路,求最长的最短路 删边操作要标记节点以及节点对应的边 #incl ...
- HDU 3987 Harry Potter and the Forbidden Forest(边权放大法+最小割)
Harry Potter and the Forbidden Forest Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/ ...
- hdu 3987 Harry Potter and the Forbidden Forest 求割边最少的最小割
view code//hdu 3987 #include <iostream> #include <cstdio> #include <algorithm> #in ...
- Bridges: The Final Battle
对修改操作按时间分治,设$solve(l,r,n,m)$为考虑时间在$[l,r]$的修改操作,作用范围是$n$个点,$m$条边的图. 若$l=r$,则暴力Tarjan统计桥边个数即可. 否则提取出$[ ...
随机推荐
- Mybatis查询报错:There is no getter for property named '*' in 'class java.lang.String
问题: 执行查询时报错:There is no getter for property named '*' in 'class java.lang.String 原因: 传过去的参数为识别.本例为 p ...
- CentOS 7 下 jdk8 安装教程
方法一: 一.下载 官网下载地址 下载需要确认当前系统是32位还是64位,可通过命令查询: sudo uname --m 根据查询结果下载对应的jdk版本(如): i686 //表 ...
- Hive[6] HiveQL 查询
6.1 SELECT ... FROM 语句 hive> SELECT name,salary FROM employees; --普通查询 hive>SELECT e.n ...
- AwesomeMenu,仿Path主菜单效果
项目主页: AwesomeMenu 项目主页 实例下载: 最新源代码点击下载 用法简介: 通过创建菜单各个单元项来创建菜单: UIImage *storyMenuItemImage = [UIImag ...
- Manacher算法:求解最长回文字符串,时间复杂度为O(N)
原文转载自:http://blog.csdn.net/yzl_rex/article/details/7908259 回文串定义:"回文串"是一个正读和反读都一样的字符串,比如&q ...
- PHP Socket服务器搭建和测试
1.socket服务器搭建思路 1) 目的:理解socket服务器工作机制 2) 思路:创建socket -> 把socket加入连接池 -> 处理接收信息 -> 握手动作 -> ...
- 使用selenium模拟登录知乎
网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录. 获取知乎内容的方法有两种,一种是使用request,想办法携带cookies等必 ...
- VIM安装YCM插件
折腾了两天,终于好了 1.配置VIM (1)下载相关插件 sudo apt-get install git sudo apt-get install build-essential cmake sud ...
- C细节错误
2018.11.20 (1)有关优先级的细节 while (c = getchar() && c == '\n') { printf("c = %d\n", c); ...
- Android 拍照或相册选择照片进行显示缩放位图 Demo
拍照后直接使用 BitmapFactory.decodeStream(...) 进行创建 Bitmap 并显示是有问题的. Bitmap 是个简单对象,它只存储实际像素数据,也就是说,即使原始照片已压 ...