https://vjudge.net/problem/UVALive-6891

题意:

给定一个加权无向图,还有起点和终点,现在有个SWERC公司,拥有图中的m个顶点,现在可以使图中的每一条边都加上k后求最短路,使得最短路上的点都包括在SWERC公司拥有的m个顶点中。求k的最大值。

思路:

对于k,采用二分法枚举。
我们可以求出起点到终点的最短路径,然后判断这些点是否都在SWERC公司当中即可。

还有容易错的一点!!

每个图中可能不止一条最短路,也许一条最短路时满足条件的,但是另外的是不满足的,那么这样也是不行的。

对于这个可以这样解决,在dijkstra算法当中,每次选择最短边加入时,在长度相同的情况下,我们优先选择不在SWERC公司中的顶点,这样这个问题就解决了。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
typedef pair<int,long long> pll;
const int INF=0x3f3f3f3f;
const int maxn=+; int n,p,src,dst,m; int sw[maxn];
ll d[maxn];
int vis[maxn];
int path[maxn]; vector<pll> G[maxn]; bool dijkstra(ll x)
{
memset(d,INF,sizeof(d));
memset(vis,,sizeof(vis));
memset(path,,sizeof(path)); d[src]=; for(int i=;i<=n;i++)
{
ll MIN =20000000000000LL;
int pos;
for(int j=;j<=n;j++)
{
if(d[j]<=MIN && !vis[j])
{
if(d[j]==MIN) {if(sw[j]==) pos=j;} //这个很重要,优先考虑不在SW中的点
else
{
MIN=d[j];
pos=j;
}
}
} if(MIN==20000000000000LL) break;
if(pos==dst) break;
vis[pos]=; for(int j=;j<G[pos].size();j++)
{
int v=G[pos][j].first;
if(vis[v]) continue;
ll w=G[pos][j].second+x;
if(d[pos]+w<d[v])
{
d[v]=d[pos]+w;
path[v]=pos;
}
}
} for(int i=dst;path[i]!=;i=path[i])
if(sw[i]==) return false; return true;
} int main()
{
//freopen("input.txt","r",stdin);
while(~scanf("%d%d%d%d",&n,&p,&src,&dst))
{
for(int i=;i<=n;i++) G[i].clear();
memset(sw,,sizeof(sw)); for(int i=;i<p;i++)
{
int a,b; ll c;
scanf("%d%d%lld",&a,&b,&c);
G[a].push_back(make_pair(b,c));
G[b].push_back(make_pair(a,c));
} scanf("%d",&m);
for(int i=;i<m;i++)
{
int x;
scanf("%d",&x);
sw[x]=;
} ll ans=;
ll L=,R=20000000000000LL;
while(L<=R)
{
ll mid=(L+R)/;
if(dijkstra(mid))
{
ans=mid;
L=mid+;
}
else R=mid-;
} if(ans==) puts("Impossible");
else if(ans==20000000000000LL) puts("Infinity");
else printf("%lld\n",ans);
}
return ;
}

LA 6891 Money Transfers(最短路)的更多相关文章

  1. LA 4223 最短路 路径选择要求提高一点

    F - Trucking Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Statu ...

  2. timus 1210 Kind Spirits(最短路)(动态规划)

    Kind Spirits Time limit: 1.0 secondMemory limit: 64 MB Ivanushka the Fool lives at the planet of 0-l ...

  3. [原]poj-2680-Choose the best route-dijkstra(基础最短路)

    题目大意: 已知n 个点,m条路线,s为终点:给出m条路线及其权值:给出w个起点,求最短路! 思路:基础的dijkstra,有向无环正权最短路,只要把终点和起点 reverse考虑便可. AC代码如下 ...

  4. UVA 10537 The Toll! Revisited uva1027 Toll(最短路+数学坑)

    前者之所以叫加强版,就是把uva1027改编了,附加上打印路径罢了. 03年的final题哦!!虽然是水题,但不是我这个只会做图论题的跛子能轻易尝试的——因为有个数学坑. 题意:运送x个货物从a-&g ...

  5. Codeforces Round #Pi (Div. 2) E. President and Roads tarjan+最短路

    E. President and RoadsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/567 ...

  6. POJ 3835 &amp; HDU 3268 Columbus’s bargain(最短路 Spfa)

    题目链接: POJ:http://poj.org/problem?id=3835 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=3268 Problem ...

  7. [TJOI2012]桥(最短路+线段树)

    有n个岛屿, m座桥,每座桥连通两座岛屿,桥上会有一些敌人,玩家只有消灭了桥上的敌人才能通过,与此同时桥上的敌人会对玩家造成一定伤害.而且会有一个大Boss镇守一座桥,以玩家目前的能力,是不可能通过的 ...

  8. POJ 1661 Help Jimmy(DP/最短路)

    Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14980 Accepted: 4993 Descripti ...

  9. JZOJ.5287【NOIP2017模拟8.16】最短路

    Description

随机推荐

  1. Eclipse 真机调试检测不到手机解决方案

    想用Eclipse真机调试,但是死活检测不到手机. 手机已经打开了usb调试模式. 开始用的华为Mate9,后面试了下小米,都不行. 在网上搜了一堆,什么安全驱动.adb占用.删除360手机助手.修改 ...

  2. 160226、js常用的验证

    /*** 特殊符号 */ function specialCharacter(carNo){ var st=/^[^/@#$%^&*()—''_()!¥~·..,-<><&g ...

  3. SQL取某个字符串最后一次出现的位置后面的字符串方法

    --sql怎么取某个字符串最后一次出现的位置后面的字符串 declare @s varchar(max); set @s = 'fj/2016815/2016081553677565.pdf'; se ...

  4. 。。。。。。不带http https : 不报错 spring boot elasticsearch rest

    ......不带http https  : 不报错 先telnet http://onf:8080/getES653/道路桥梁正在“理疗”%20这14条道路纳入市政中修 @GetMapping(&qu ...

  5. Centos 系统Java环境安装

    Java安装 安装SUN的JDK: 官网:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260. ...

  6. 第1章 1.10计算机网络概述--OSI参考模型和TCP_IP协议

    传输层负责将大数据文件分段,变成数据段. 网络层负责为小分段加上IP地址,变成数据包. 数据链路层负责将数包加上MAC地址和校验值,变成数据帧. TCP/IP协议是一群协议.不只是2个协议.

  7. atime、mtime、ctime的区别及如何降低atime更新 mount时的option noatime

    atime.mtime.ctime的区别及如何降低atime更新 mount时的option  noatime http://mp.weixin.qq.com/s?__biz=MzA3MzYwNjQ3 ...

  8. Python之迭代器及生成器

    一. 迭代器 1.1 什么是可迭代对象 字符串.列表.元组.字典.集合 都可以被for循环,说明他们都是可迭代的. 我们怎么来证明这一点呢? from collections import Itera ...

  9. python初识(二)

    目录: 进制 基本数据类型 整形 布尔值 字符串 列表 元祖 字典 集合 range & enumerate 一.进制 二进制转换十进制计算: 十进制:==47 一个字节公式:==128 64 ...

  10. python初识(三)

    目录: 字符编码 文件操作 循环结构拾遗 函数 整体介绍 函数的参数 函数的返回值 函数的调用 自定义函数 一.字符编码 1.了解字符编码的知识储备 a. 文件编辑存取文件的原理(nodepad++, ...