洛谷P1186 玛丽卡http://blog.csdn.net/huihao123456/article/details/73414139
题目描述

麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复。

因为她和他们不住在同一个城市,因此她开始准备她的长途旅行。

在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城市路上所需花费的时间。

麦克在车中无意中听到有一条路正在维修,并且那儿正堵车,但没听清楚到底是哪一条路。无论哪一条路正在维修,从玛丽卡所在的城市都能到达麦克所在的城市。

玛丽卡将只从不堵车的路上通过,并且她将按最短路线行车。麦克希望知道在最糟糕的情况下玛丽卡到达他所在的城市需要多长时间,这样他就能保证他的女朋友离开该城市足够远。

编写程序,帮助麦克找出玛丽卡按最短路线通过不堵车道路到达他所在城市所需的最长时间(用分钟表示)。

输入输出格式

输入格式:

第一行有两个用空格隔开的数N和M,分别表示城市的数量以及城市间道路的数量。1≤N≤1000,1≤M≤N*(N-1)/2。城市用数字1至N标识,麦克在城市1中,玛丽卡在城市N中。

接下来的M行中每行包含三个用空格隔开的数A,B和V。其中1≤A,B≤N,1≤V≤1000。这些数字表示在A和城市B中间有一条双行道,并且在V分钟内是就能通过。

输出格式:

输出文件的第一行中写出用分钟表示的最长时间,在这段时间中,无论哪条路在堵车,玛丽卡应该能够到达麦克处,如果少于这个时间的话,则必定存在一条路,该条路一旦堵车,玛丽卡就不能够赶到麦克处。

输入样例#1:
5 7
1 2 8
1 4 10
2 3 9
2 4 10
2 5 1
3 4 7
3 5 10
输出样例#1:
27

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=+;
const int maxm=*;
int read()
{
int x=,f=;
char ch;
ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-''; ch=getchar();}
return x*f;
}
int n,m,num=;
int head[maxn],d[maxn],inq[maxn],g[maxn][maxn],team[maxm],pre[maxn];
struct edges
{
int next,to,dist;
} e[maxm];
void add(int from,int to,int dist)
{
e[++num].next=head[from];
e[num].to=to;
e[num].dist=dist;
head[from]=num;
}
void spfa()
{
memset(inq,,sizeof(inq));
memset(team,,sizeof(team));
memset(d,0x7f,sizeof(d));
int h=,t=;
team[]=;
inq[]=;
d[]=;
do
{
h++;
int u=team[h];
inq[u]=;
for(int i=head[u];i;i=e[i].next)
{
int to=e[i].to;
if(d[to]>d[u]+e[i].dist)
{
d[to]=d[u]+e[i].dist;
pre[to]=u;//记录前驱
if(!inq[to])
{
inq[to]=;
team[++t]=to;
}
}
}
}while(h!=t);
}
void spfa1()
{
memset(inq,,sizeof(inq));
memset(team,,sizeof(team));
memset(d,0x7f,sizeof(d));
int h=,t=;
team[]=;
inq[]=;
d[]=;
while(h<t)
{
h++;
int u=team[h];
inq[u]=;
for(int i=head[u];i;i=e[i].next)
{
int to=e[i].to;
if(!g[u][to])//判断边是否已删
{
if(d[to]>d[u]+e[i].dist)
{
d[to]=d[u]+e[i].dist;
if(!inq[to])
{
inq[to]=;
team[++t]=to;
}
}
}
}
}
}
int main()
{
int i;
n=read();m=read();
int x,y,z;
for(i=;i<=m;i++)
{ scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
spfa();
int maxx=;
int k=n;
while(k>)//删边(轮流删一遍)
{
g[k][pre[k]]=g[pre[k]][k]=;
spfa1();
g[k][pre[k]]=g[pre[k]][k]=;//恢复被删的边,转删其他的边
k=pre[k];//递归记录前驱
maxx=max(maxx,d[n]);
}
printf("%d",maxx);
}
    

洛谷P1186 玛丽卡 spfa+删边的更多相关文章

  1. 洛谷 P1186 玛丽卡

    P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...

  2. 洛谷——P1186 玛丽卡

    P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...

  3. 洛谷—— P1186 玛丽卡

    https://www.luogu.org/problem/show?pid=1186 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长 ...

  4. 洛谷P1186 玛丽卡

    题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...

  5. 洛谷P1186玛丽卡

    传送门啦 先跑一遍最短路,将最短路的路径记录下来,然后枚举每一条最短路的边,将其断掉,记录此时的1-n的时间,取其中最大的一个时间即为所求. (通过 $ cut[][] $ 和 $ f[] $ 进行操 ...

  6. Luogu P1186 玛丽卡 【最短路】By cellur925

    题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...

  7. P1186 玛丽卡

    题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...

  8. luogu P1186 玛丽卡

    题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...

  9. P1186 玛丽卡 删边最短路最大值

    反正蛮水的一道题. 胡雨菲一句话让我的代码减少了10行还A了,之前的是个错的. 思路:先求出最短路,然后依次删去最短路上的每一条边,跑最短路求最大值. 关于删边:我的想法是当作链表删除,把last的n ...

随机推荐

  1. c#实现QQ群成员列表导出及邮件群发之邮件群发

    主题已迁移至:http://atiblogs.com/ ITO-神奇的程序员

  2. eclipse和myeclipse的he user operation is wating问题

    近做了一个MyEclipse项目,但是没开始多久就发现了这个问题:只要文件被修改过,不论多小的修改,保存的时候都会跳出一个框框,里面写着the user operation is wating.... ...

  3. Jenkins的项目管理

    新建Item 使用Jenkins最重要的是能够创建一些工作流,除了部署,还能做很多流程上的事情.同样,一条条项目建起来需要做一定的管理,在Jenkins首页Jenkins->新建可以按自己的需要 ...

  4. dubbo相关的知识点总结

    dubbo最近提交到了apache,成为了apache的孵化项目,又开始活跃起来了.就官方在git上面的说明文档和其他资料,学习总结以下dubbo的一些知识点. .The dubbo protocol ...

  5. java多线程(1) 线程的基本概念

    一.线程的基本概念: 线程是一个程序里面不同的执行路径. 程序里面不同的执行路径,每一个分支都是一个线程.   进程:静态的概念.机器上的一个class文件,机器上的一个exe文件,这叫一个进程. 机 ...

  6. Java-Runoob-面向对象:Java 继承-u1

    ylbtech-Java-Runoob-面向对象:Java 继承 1.返回顶部 1. Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类 ...

  7. Tool:Visual Studio Code

    ylbtech-Tool:Visual Studio Code Microsoft在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 Ma ...

  8. 初学者手册-IDEA中的Git

    1.Git的更新.提交.还原 IDEA中Git的更新.提交.还原方法 2.设置Git的提交方式为http 3.

  9. zookeeper的四种类型的节点

    znode创建类型(CreateMode),有以下四种: PERSISTENT 持久化节点 PERSISTENT_SEQUENTIAL 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 ...

  10. node 中 npm报错 Error: ENOENT, stat 'C:\Users\Administrator\AppData\Roaming\npm'

    今天在看node书本时,安装express,看看里面的包.没想到出现这样一种情况. 报错了.后来思考了一下,可能是修改了node的默认安装路径.于是准备在出错的路径下建一个npm文件夹. 注意,有个时 ...