HDU 1595 find the longest of the shortest

华为MA5626 ONU开局配置实战:从零到业务就绪的完整命令手册 本文详细介绍了华为MA5626 ONU设备的开局配置全流程,包括物理连接、命令行初始化、业务VLAN划分、PoE功能配置及故障排查。通过实战命令手册,帮助网络工程师快速完成从设备上电到业务就绪的完整配置,特别适合FTTB场景部署。 阅读详情

转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove

题意是说任意去掉一条边之后的最短路的最长长度为多少。

顶点数为N达到1000的范围,显然枚举所有边再求最短路,复杂度为N^2*O(spfa),会超时的。

仔细想想便知,原图上求一次最短路,如果我们删掉最短路之外的边,之后的最短路还是原图的最短路,那我们只要枚举最短路上的边,然后再求最短路就行了。

最多路径上会有N条边,复杂度为N*O(spfa),1S左右AC。写的代码很囧,特别是记录最短路径上的边的时候,有许多地方可以改进,之前WA了,是因为我只删掉了单向边,因为是无向图,所以需要双向都删除,我找了两次,其实u->v,和v->u的边在前向星中的存储必然是相邻的,idx^1便是另外一条边的位置。懒得改了

 

/*ID:cxlove
PROB:HDU 1595
DATA:2012.4.4
HINT:最短路径+枚举最短路径上的边
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#define inf 1<<30
using namespace std;
struct Node{
    int u,v,w,next;
}edge[1000005];
struct EDGE{
    int u,v,w,idx1,idx2;
}path[1005];
int start[1005],pre[1005],dist[1005];
int n,m,cnt,tot;
void addedge(int u,int v,int w){
    edge[cnt].u=u;edge[cnt].v=v;edge[cnt].w=w;
    edge[cnt].next=start[u];start[u]=cnt++;
}
void Init(){
    int u,v,w;
    cnt=0;tot=0;
    memset(start,-1,sizeof(start));
    memset(pre,-1,sizeof(pre));
    while(m--){
        scanf("%d%d%d",&u,&v,&w);
        addedge(u,v,w);
        addedge(v,u,w);
    }
}
void spfa(){
    bool flag[1005];
    for(int i=1;i<=n;i++)
        dist[i]=inf;
    memset(flag,false,sizeof(flag));
    queue<int >que;
    que.push(1);
    flag[1]=true;
    dist[1]=0;
    while(!que.empty()){
        int u=que.front();
        que.pop();
        flag[u]=false;
        for(int i=start[u];i!=-1;i=edge[i].next){
            int v=edge[i].v,w=edge[i].w;
            if(dist[v]>dist[u]+w){
                dist[v]=dist[u]+w;
                pre[v]=u;
                if(!flag[v]){
                    flag[v]=true;
                    que.push(v);
                }
            }
        }
    }
}
void find_path(){
    int v=n;
    while(pre[v]!=-1){
        path[tot].u=pre[v];
        path[tot].v=v;
        path[tot].w=dist[v]-dist[pre[v]];
        int k=start[pre[v]];
        while(edge[k].v!=v)
            k=edge[k].next;
        path[tot].idx1=k;
        k=start[v];
        while(edge[k].v!=pre[v])
            k=edge[k].next;
        path[tot++].idx2=k;
        v=pre[v];
    }
}
void slove(){
    int ans=0;
    for(int i=0;i<tot;i++){
        int idx1=path[i].idx1,idx2=path[i].idx2;
        int t1=edge[idx1].w,t2=edge[idx2].w;
        edge[idx1].w=inf;edge[idx2].w=inf;
        spfa();
        ans=max(ans,dist[n]);
        edge[idx1].w=t1;edge[idx2].w=t2;
    }
    printf("%d\n",ans);
}
int main(){
    while(scanf("%d%d",&n,&m)!=EOF){
        Init();
        spfa();;
        find_path();
        slove();
    }
    return 0;
}


 

西门子S7-200SMART控制步进电机(五) 前面详细讲述了运动控制向导的配置和运动控制指令的使用方法,接下来要讲的是简单程序的编写和调试。 在编写程序时,需要注意的是自定义的符号和地址不能与运动控制向导分配的存储器冲突。 一、软硬件组成 1、软件:STEP-7-Micro/WIN SMART软件; 2、硬件:西门子S7-200 SMART ST40 PLC、57步进电机和驱动器(DM542)。 二、手动控制步进电机旋转方向和速度 具体步骤... 阅读详情

相关推荐

MATLAB App Designer 实现多窗口交互与数据传递实战

本文详细介绍了如何使用MATLAB App Designer实现多窗口交互与数据传递的实战技巧。从基础的多窗口应用设计到高级的动态窗口创建,涵盖了窗口调用控制、数据传递方法、状态管理及用户体验优化等核心内容,帮助开发者高效构建复杂的MATLAB GUI应用。

milk5的博客 637

hdu 1595 find the longest of the shortest (dijkstra + spfa)

find the longest of the shortest 题目链接:Problem - 1595 题目大意:现有一个无向图,其中某一条边不存在(要删除),求所有情况中最短路里的最大值。 题目分析: 思路一:枚举m条边,一一删除进行spfa求出最短路,然后比较出最大值。(超时) 思路二:先利用dijkstra求出最短路,再在最短路里枚举个边,一一删除进行spfa求出最短

GrEedWish_X的专栏 581

老 Intel Mac mini 装 OpenClaw:低成本常年在线方案

老款Intel Mac mini部署OpenClaw方案摘要 本文详细介绍了如何利用老款Intel Mac mini低成本部署OpenClaw系统。方案推荐2011-2018款Mac mini,建议升级至16GB内存和SSD存储以提升性能。部署步骤包括:1)安装Ubuntu系统;2)配置Docker环境;3)通过docker-compose部署OpenClaw及其依赖组件(PostgreSQL和Redis);4)进行系统级和Docker层面的性能优化;5)设置开机自启动服务。该方案充分利用老款设备剩余价值,

一键难忘的博客 2415

hdu 1595 find the longest of the shortest ( spfa + 枚举 )

1 解题思路 1.1 题目大意     给出一个无向图,Marica在结点1,Mirko在结点n,其中有一条边损坏了,但并不知道是哪条,Marica选的路一定是最短路,求最坏情况下Marica要走的路程是多长。 1.2 题目分析     一开始我通过枚举每条边为坏边,将其设为不可达,然后求1-N的最短距离,最后取一个最大值,结果超时了。然后才想到如果我将不是最短路径上的边设为不可达对最短距

时空飞扬的专栏 600

hdu1595 find the longest of the shortest(最短路 + 删边)

题意大致是让你删一条边,使得从1走到n的最短路最大。 思路 : 首先,要明白一点,删一条不是从1到n最短路上的边毫无意义,所以可以先找出来最短路上的边,然后不断试图删除这其中的一条边,求出最大的一条最短路就可以了。 然后这个题目是多组输入,各种初始化有点烦,对链式前向星还不是很了解,还有要分析自己定义的变量是否要初始化,比如如我定义了一个flag来控制pre[ ] 更新,以防造成死循环。所以...

一身清贫怎敢入繁华 512

hdu1595(枚举+最短路,Dijkstra/SPFA)

题目链接:hdu1595 Dijkstra:515MS /* 题意: 求删掉任意一条边的最长最短路 思路: 首先求出最短路,同时记录下路径,接着枚举最短路上 每一条边(将此边切段),在求最短路,求这些最短路中的最长路 */ #include #include #include #include #include #include using namespace

no pains,no gains 1122

HDU - 1595 - find the longest of the shortest (最短路)

题意: 去掉一条边的最短路中最长的是多少。 不需要全部枚举,只需枚举最短路中的边即可,因为去掉一条边相当于距离无限大,最短路还是原来的,只有改变最短路中的边才有可能改变最短路的大小。 #include &lt;bits/stdc++.h&gt; using namespace std; const int maxn = 1010; const int inf = 0x3f3f3f3f; i...

刘二狗的博客 345

hdu1595find the longest of shortest

#include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;queue&gt; #include&lt;cstdio&gt; using namespace std; const int inf=0x3f3f3f3f; const int maxn=1005; int n,m; int dis[maxn],vis[maxn],pre[m...

weixin_43331783的博客 202

HDU1595---find the longest of the shortest

http://acm.hdu.edu.cn/showproblem.php?pid=1595 题目大意: 从城市1到城市n有m条双向路,其中有一条路是坏的,但是我们不知道到底哪条路是坏的。 考虑到最坏情况,我们从城市1走到城市n所需要的最少时间是多少。 解题思路: 起初,想法很单纯,枚举每一条边为坏边,求1到n的最短路,然后在这些最短路中取最大值。 思路是正确的,但是会超时

sanmingzi3344的专栏 927

hdu 1595 find the longest of the shortest

点击打开链接hdu 1595 思路:最短路+优先队列+Dijstra+枚举边 分析: 1 题目要求的是删掉一条边之和求出的最短路中的最大值。 2 很明显,肯定是要先求出原图的最短路并且记录父亲节点。现在我们可以想,如果要枚举所有的边,显然这个是不可能的实现的。所以我们仔细分析可以知道其实能够对最短路产生影响的就是原图最短路上的边,所以我们只需要去枚举删除最短路径上面边然后求最短路即可,...

我是传奇 205

hdu 1595 find the longest of the shortest

Marica is very angry with Mirko because he found a new girlfriend and she seeks revenge.Since she doesn't live in the same city, she started preparing for the long journey.We know for every road how m

Hard。 261

[HDU1595] find the longest of the shortest

题目链接: 点我 题意: 给定一个\(n\)个点,\(m\)条边的带权无向图,起点为\(1\),终点为\(n\),现在可以删去其中的一条边,求一种删边方案使得剩下图的最短路值最大,输出这个最短路的长度。 题目保证删去任意一条边都能使得\(1\)与\(n\)连通,且边权均为正值。 题目分析: 首先用\(Dijkstra\)跑出原图的最短路,由于在最短路之外删边对图的最短路没有影响,所以考虑在最短路上...

weixin_30371469的博客 81

【ICPC-310】hdu 1595 find the longest of the shortest

点击打开链接hdu 1595 思路:最短路+优先队列+Dijstra+枚举边 分析: 1 题目要求的是删掉一条边之和求出的最短路中的最大值。 2 很明显,肯定是要先求出原图的最短路并且记录父亲节点。现在我们可以想,如果要枚举所有的边,显然这个是不可能的实现的。所以我们仔细分析可以知道其实能够对最短路产生影响的就是原图最短路上的边,所以我们只需要去枚举删除最短路径上面边然后求最短路即可,最后...

藏经阁 | 玄苦 1062

Hdu 1595 find the longest of the shortest 枚举+最短路

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1595 题目大意:给你N个点,M条边,当M条边中的某一条断

e的专栏 550

HDU - 1595 find the longest of the shortest

Marica is very angry with Mirko because he found a new girlfriend and she seeks revenge.Since she doesn't live in the same city, she started preparing for the long journey.We know for every road how m...

XYBDX的博客 206

hdu 1595 find the longest of the shortest 最短路dijkstra+枚举

题目链接 题意:给出n个点,m条边,求去除任意一条边的最长最短路。 这题先用求一次最短路,记录下路径。如果去除的边不在路径上,那么最短路不变。所以我们只要考虑去除最短路上的边的情况。枚举最短路上的边删除,求最短路,注意要还原边。 这题用spfa的邻接矩阵形式怎么也过不了,一直TLE。代码不变,换成dijkstra之后就能过了。不知道是不是稠密图的原因,spfa在这种情况下没有dijkstra

弱菜zc 1025

hdu1595find the longest of the shortest(dijkstra+枚举)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1595 find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 329

zhiyuanjiang的博客 355

基于PF-CZM的ABAQUS相场断裂模拟:Fortran UEL子程序实现

在ABAQUS软件框架内,采用相场正则化方法对凝聚带模型(PF-CZM)进行数值实现。需要特别说明的是,相关用户自定义单元(UEL)子程序完全基于FORTRAN90语言,并严格遵循自由格式编码规范。当前版本的程序仅支持串行计算模式,尚不具备并行运算功能。具体操作时,可通过命令行界面提交分析任务,例如执行弯曲模拟时,需指定作业名称并调用相应的用户子程序文件。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

基于单片机的SCPI命令解析模块的设计与实现.pdf

基于单片机的SCPI命令解析模块的设计与实现.pdf

上一篇: vector的第二次组队赛小结 .
下一篇: 鸽巢原理小结
ACM_cxlove
博客等级 码龄14年 1421粉丝 430原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值