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 ...
随机推荐
- Codeforces 235C
题目大意: 给定一个字符串,接下来再给n个字符串,求原字符串中含有多少个当前给定字符串的循环同构体的字符串的个数 以初始字符串构建后缀自动机,在自动机上前进的时候,比如当前需要匹配的字符串为aba,到 ...
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
转自:http://www.jianshu.com/p/89687f618837 原因分析 当我们在Android依赖库中使用switch-case语句访问资源ID时会报如下图所示的错误,报的错误 ...
- 开发基于Handoff的App(Swift)
iOS8推出一个新特性,叫做Handoff.Handoff中文含义为换手(把接力棒传给下一个人),可以在一台Mac和iOS设备上开始工作,中途将工作交换到另一个Mac或iOS设备中进行 ...
- iOS多语言备选机制
近期伊书突然接到一些外国用户的投诉,说伊书界面变成了中文,但他们系统语言不是中文,是法文俄文日文等,伊书只支持中文跟英文,在不支持系统所用语言的时候,理应会自动选用英文,不知为什么会选成了中文,经过艰 ...
- Android安全之WebViewUXSS漏洞
Android安全 WebView UXSS app开发 漏洞分析 移动安全 0X01 前言 XSS是我们比较熟悉的一种攻击方式,包括存储型XSS.反射型XSS.DOM XSS等,但UXSS(通用型X ...
- object_c函数多个返回值
- (void)readStr1:(NSString**)str1 andStr2:(NSString**)str2{ NSString *s1 = @"1"; NSS ...
- Osmocom-BB多信道修改代码相关
修改bb\src\target\firmware\layer1\prim_rx_nb.c 文件 这个nb表示normalburst,指的是ccch的数据,用专业的术语,应该是,一个ccch的burst ...
- chrom,firefox,ie不能上网,百度浏览器却可以。。。
chrome和ie提示DNS查找失败,但是百度浏览器没任何问题,这是什么情况... 尝试很多方法后无用,命令行执行很多命令,无用, 试一下阿里的 DNS: 首选:223.5.5.5备用:223.6.6 ...
- php大力力 [011节] PHP常量使用场景
2015-08-24 php大力力011. PHP常量使用场景 $root = "dali"; define("ROOT",10) echo "ROO ...
- Ubuntu 重新设置网络
sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service ...