URAL 2034 Caravans(变态最短路)
Caravans
Memory limit: 64 MB
Ilya often skips his classes at the university. His friends criticize
him for this, but they don’t know that Ilya spends this time not
watching TV serials or listening to music. He creates a computer game of
his dreams. The game’s world is a forest. There are elves, wooden
houses, and a villain. And one can rob caravans there! Though there is
only one caravan in the game so far, Ilya has hard time trying to
implement the process of robbing.
game world can be represented as several settlements connected by
roads. It is possible to get from any settlement to any other by roads
(possibly, passing through other settlements on the way). The
settlements are numbered by integers from 1 to n.
All the roads are two-way and have the same length equal to 1. It is not
allowed to move outside the roads. The caravan goes from settlement s to settlement f following one of the shortest routes. Settlement r is the villain’s den. A band of robbers from settlement r
has received an assignment to rob the caravan. In the evening they will
have an exact plan of the route that the caravan will take the next
morning. During the night they will be able to move to any settlement on
the route, even to settlement s or f. They will lay an
ambush there and rob the caravan in the morning. Of course, among all
such settlements the robbers will choose the one closest to settlement r.
The robbers have a lot of time until the evening. They don’t know the
caravan’s route yet, but they want to know the maximum distance they
will have to go in the worst case to the settlement where they will rob the caravan.
Help Ilya calculate this distance, and it may happen that he will attend his classes again!
Input
which are the numbers of the settlements connected by the road. It is
guaranteed that each road connects two different settlements and there
is at most one road between any two settlements. It is also guaranteed
that the road network is connected. In the last line you are given
pairwise different integers s, f, and r, which are the numbers of the settlements described above.
Output
Sample
| input | output |
|---|---|
7 7 |
2 |
Notes
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#define inf 0x3f3f3f3f
#define met(a,b) memset(a,b,sizeof a)
typedef long long ll;
using namespace std;
const int N = 1e5+;
const int M = ;
int n,m,k,tot=,s,t,r;
int dis[N],head[N],vis[N],ans[N],d[N];
queue<int>q;
struct man{
int to,next;
}edg[*N];
void add(int u,int v){
edg[tot].to=v;edg[tot].next=head[u];head[u]=tot++;
edg[tot].to=u;edg[tot].next=head[v];head[v]=tot++;
}
void spfa1(int x){
met(vis,);met(d,inf);
vis[x]=;ans[x]=dis[x];d[x]=;
while(!q.empty())q.pop();
q.push(x);
while(!q.empty()){
int u=q.front();q.pop();vis[u]=;
for(int i=head[u];i!=-;i=edg[i].next){
int v=edg[i].to;
if(d[v]>d[u]+){
d[v]=d[u]+;
ans[v]=min(ans[u],dis[v]);
if(!vis[v]){
q.push(v);vis[v]=;
}
}
else if(d[v]==d[u]+ && ans[v]<ans[u]){
ans[v]=min(ans[u], dis[v]);
if(!vis[v]){
q.push(v);vis[v]=;
}
}
}
}
}
void spfa(int x){
met(vis,);met(dis,inf);
vis[x]=;dis[x]=;
while(!q.empty())q.pop();
q.push(x);
while(!q.empty()){
int u=q.front();q.pop();vis[u]=;
for(int i=head[u];i!=-;i=edg[i].next){
int v=edg[i].to;
if(dis[v]>dis[u]+){
dis[v]=dis[u]+;
if(!vis[v]){
q.push(v);vis[v]=;
}
}
}
}
}
int main() {
scanf("%d%d",&n,&m);
int u,v;met(head,-);
while(m--){
scanf("%d%d",&u,&v);
add(u,v);
}
scanf("%d%d%d",&s,&t,&r);
spfa(r);
spfa1(s);
printf("%d\n",ans[t]);
return ;
}
URAL 2034 Caravans(变态最短路)的更多相关文章
- URAL 2034 : Caravans
Description Student Ilya often skips his classes at the university. His friends criticize him for ...
- URAL 1085 Meeting(最短路)
Meeting Time limit: 2.0 secondMemory limit: 64 MB K friends has decided to meet in order to celebrat ...
- URAL 1934 Black Spot(最短路)
Black Spot Time limit: 1.0 secondMemory limit: 64 MB Bootstrap: Jones's terrible leviathan will find ...
- URAL 2069 Hard Rock (最短路)
题意:给定 n + m 个街道,问你从左上角走到右下角的所有路的权值最小的中的最大的. 析:我们只要考虑几种情况就好了,先走行再走列和先走列再走行差不多.要么是先横着,再竖着,要么是先横再竖再横,要么 ...
- URAL
URAL 2035 输入x,y,c, 找到任意一对a,b 使得a+b==c&& 0<=a<=x && 0<=b<=y 注意后两个条件,顺序搞错 ...
- Ural 1741 Communication Fiend(隐式图+虚拟节点最短路)
1741. Communication Fiend Time limit: 1.0 second Memory limit: 64 MB Kolya has returned from a summe ...
- DP/最短路 URAL 1741 Communication Fiend
题目传送门 /* 题意:程序从1到n版本升级,正版+正版->正版,正版+盗版->盗版,盗版+盗版->盗版 正版+破解版->正版,盗版+破解版->盗版 DP:每种情况考虑一 ...
- URAL 1002 Phone Numbers(KMP+最短路orDP)
In the present world you frequently meet a lot of call numbers and they are going to be longer and l ...
- URAL 1056 Computer Net(最短路)
Computer Net Time limit: 2.0 secondMemory limit: 64 MB Background Computer net is created by consecu ...
随机推荐
- android button text属性中英文大小写问题
Android版本升级的原因,需要手动添加属性android:textAllCaps="false"
- Rhel6-集群管理(luci&&ricci)配置文档
理论基础: User → HA → Lb → web → sql → 分布式filesystem ->磁盘I/O 用户 高可用 负载均衡 应用 数据库 mf ...
- Problem C 链表
Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报 ...
- java基础之 创建对象的几种方式
有4种显式地创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor ...
- JS创建自定义对象
普通对象的创建: 创建对象: 1.people = new Object(); people.name = "lin"; people.age = "26“; 2.创建字 ...
- ThinkPHP中Session用法详解
在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有: Session::set(name, value):注册 session . Session::is_set(name):检 ...
- 2016 - 1 -19 初学HTML5 第一天
1.HTML COMMANDS MHTL commands called elements.Usually, an element has a start tag and an end tag e.g ...
- Python网络编程03----Python3.*中socketserver
socketserver(在Python2.*中的是SocketServer模块)是标准库中一个高级别的模块.用于简化网络客户与服务器的实现(在前面使用socket的过程中,我们先设置了socket的 ...
- Java容器类接口:Iterator,Collection,Map
Iterator Iterator被称为迭代器,是一个对象,它的工作是遍历并选择序列中的对象,可以实现以下一些操作: 使用方法iterator()要求容器返回一个Iterator,Iterator将返 ...
- NSArray,NSSet,NSDictionary的遍历,基本使用集锦
NSArray *array = [NSArray arrayWithObjects:@"zhangsan",@"lisi",@"wangwu&quo ...