City Tour
Description
Input
Output
对于每组测试数据输出满足Alice要求的从A到B的最短距离。
Sample Input
#include<stdio.h>
#include<string.h>
#define maxn 2020
#define maxm 50500
#define inf 100000000 struct edge
{
int u,v;
int val,next;
} e[*maxm],seq[maxm]; int last[maxn];
int que[maxm],dis[maxn];
bool vis[maxn];
int t,n,m,A,B; void add(int u,int v,int val)//离散化存储
{
e[t].v = v;
e[t].val = val;
e[t].next = last[u];
last[u] = t++;
return ;
}
void build(int val)//建树
{
memset(last,-,sizeof(last));
t = ;
for (int i=; i<=m; i++)
if (seq[i].val <= val)
{
add(seq[i].u,seq[i].v,seq[i].val);
add(seq[i].v,seq[i].u,seq[i].val);
}
return ;
} int spfa()
{//采用负权存储
memset(vis,,sizeof(vis));
for (int i=; i<=n; i++) dis[i] = inf;
int head = , tail = ;
que[++tail] = A;
vis[A] = ;
dis[A] = ;
while (head < tail)
{
int u = que[++head];
for (int j=last[u]; j!=-; j=e[j].next)//遍历与j相连的边
{
int v = e[j].v;
int val = e[j].val;
if (dis[u] + val < dis[v]) //松弛条件判断
{
dis[v] = dis[u] + val;
if (vis[v]==)
{
vis[v] = ;
que[++tail] = v;
}
}
}
vis[u] = ;
}
if (dis[B] < inf) return dis[B];
return -;
}
int solve()
{
int res = -;
int l = , r = ;
while (l <= r)//二分最大边
{
int mid = (l + r)/;
build(mid);
int tmp = spfa();
if (tmp == -) l = mid + ;
else
{//当mid(即每段中的最大值)减少时,res进行更新
res = tmp;
r = mid - ;
}
}
return res;
}
int main()
{
while (scanf("%d%d%d%d",&n,&m,&A,&B)==)
{
for (int i=; i<=m; i++) scanf("%d%d%d",&seq[i].u,&seq[i].v,&seq[i].val);
int ans = solve();
printf("%d\n",ans);
}
return ;
}
图论(二分+SPFA)
Sample Output
City Tour的更多相关文章
- 1307: City Tour
1307: City Tour Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description Alic ...
- HDU 5013 City Tour
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5013 题意: 思路: 这里有错,是Hi(x)=sigama(Hji)(j属于x) const int ...
- 2013 CSU校队选拔赛(1) 部分题解
A: Decimal Time Limit: 1 Sec Memory Limit: 128 MB Submit: 99 Solved: 10 [ Submit][ Status][ Web ...
- 每日英语:How to Save Detroit
Detroit is beautiful-though you probably have to be a child of the industrial Midwest, like me, to s ...
- CSU-1307-二分+dij
1307: City Tour Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 59 ...
- POJ 1637 Sightseeing tour
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9276 Accepted: 3924 ...
- poj1637 Sightseeing tour
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8859 Accepted: 3728 ...
- POJ 1637 Sightseeing tour (混合图欧拉路判定)
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6986 Accepted: 2901 ...
- POJ 1637 Sightseeing tour (混合图欧拉回路)
Sightseeing tour Description The city executive board in Lund wants to construct a sightseeing tou ...
随机推荐
- POJ 2001 Shortest Prefixes(字典树)
题目地址:POJ 2001 考察的字典树,利用的是建树时将每个点仅仅要走过就累加.最后从根节点開始遍历,当遍历到仅仅有1次走过的时候,就说明这个地方是最短的独立前缀.然后记录下长度,输出就可以. 代码 ...
- Tomcat: IllegalStateException: No output folder --reference
Today, I started to create a couple of JSP pages for the server-side part of my MSc thesis project i ...
- Android Back Home键监听
Android Back Home键监听 Back键的监听 对于Back键的监听比较容易,可以在多个系统回调处拦截,比如在activity的下列方法中都可以收到Back键按下的事件: @Overrid ...
- 利用反射的特性将DataReader对象转化为List集合
问题:将SqlDataReader对象转换为List<T>集合 思路: 1,利用反射的特性得到对应实体Model的公共属性 Type type = typeof(T); PropertyI ...
- javascript基础之javascript的存在形式和js代码块在页面中的存放位置
1.存在形式 文件 如: <script src='js/jc.js'></script> 前页面 <script type='text/javascript'>a ...
- python面对对象编程----1:BlackJack(21点)
昨天读完了<Mastering Object-oriented Python>的第一部分,做一些总结. 首先,第一部分总过八章,名字叫Pythonic Classes via Specia ...
- 关于ISAPI和CGI限制,这个要设为允许
否则程序就报这个错误,注意,设置允许时不是在添加的网站上设置,而是在根iis,选择后右侧出现关于ISAPI和CGI限制,进去后选择相应版本,设置为允许就可以了
- shell中if做比较
比较两个字符串是否相等的办法是: if [ "$test"x = "test"x ]; then 这里的关键有几点: 1 使用单个等号 2 注意到等号两边各有一 ...
- Dapper基本增删改查
说明: 1.在using语句块中不用dbConnection.Open(),因为Execute方法中会Open,并且在执行完成会Close. 2.在Ado.Net中要手动Open,在Using语句块中 ...
- js子窗口修改父窗口内容
在框架中,我用 JavaScript 获取 JSON 数据,组织成 HTML 代码,最后将其填充至上层文档的一个元素中.按照一般的写法,我们需要用到类似如下的语句: 1.window.parent.d ...