BZOJ 1614 USACO 07Jan. 洛谷1948 电话线
二分+特殊姿势的check:二分最小代价P,把边权小于等于P的边设为0,其他的设为1,跑一遍最短路,判断dis[n]是否大于K
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=;
int n,p,k,tot=,Maxdis=,last[maxn],dis[maxn];
bool v[maxn];
struct edge{int to,pre,dis;}e[maxn];
struct que{int pos,dis;};
struct rec{int x,y,dis;}a[maxn];
struct cmp{
bool operator() (const que a,const que b){return a.dis>b.dis;}
};
priority_queue<que,vector<que>,cmp>q; void read(int &k){
k=; int f=; char c=getchar();
while (c<''||c>'')c=='-'&&(f=-),c=getchar();
while (''<=c&&c<='')k=k*+c-'',c=getchar();
k*=f;
}
void add(int x,int y,int z){e[++tot].to=y;e[tot].dis=z;e[tot].pre=last[x];last[x]=tot;}
void dijkstra(int x){
dis[x]=; v[x]=; q.push((que){x,});
while (!q.empty()){
que t=q.top(); int now=t.pos; q.pop();
for (int i=last[now],to;i;i=e[i].pre)
if (dis[to=e[i].to]>dis[now]+e[i].dis){
dis[to]=dis[now]+e[i].dis;
if (!v[to]){
v[to]=;
q.push((que){to,dis[to]});
}
}
v[now]=;
}
}
bool check(int x){
tot=;
memset(last,,sizeof(last));
memset(v,,sizeof(v));
memset(dis,,sizeof(dis));
for (int i=;i<=p;i++){
int d=(a[i].dis<=x)?:;
add(a[i].x,a[i].y,d); add(a[i].y,a[i].x,d);
}
dijkstra();
if (dis[n]>k) return ;
else return ;
}
int main(){
read(n); read(p); read(k);
if (p<k) return puts(""),;
for (int i=;i<=p;i++){
read(a[i].x); read(a[i].y); read(a[i].dis);
Maxdis=max(a[i].dis,Maxdis);
}
int l=,r=Maxdis;
while (l<r){
int mid=(l+r)>>;
if (check(mid)) r=mid;
else l=mid+;
}
if (check(l)) printf("%d\n",l); else printf("-1");
return ;
}
BZOJ 1614 USACO 07Jan. 洛谷1948 电话线的更多相关文章
- BZOJ 1614: [Usaco2007 Jan]Telephone Lines架设电话线
题目 1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec Memory Limit: 64 MB Description Farm ...
- POJ3662或洛谷1948 Telephone Lines
二分答案+单源最短路 POJ原题链接 洛谷原题链接 显然可以二分答案,检验\(mid\)可以使用最短路来解决. 将大于\(mid\)的边看成长度为\(1\)的边,说明要使用免费升级服务,否则长度为\( ...
- bzoj 5120 无限之环 & 洛谷 P4003 —— 费用流(多路增广SPFA)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5120 https://www.luogu.org/problemnew/show/P4003 ...
- BZOJ 1614 [Usaco2007 Jan]Telephone Lines架设电话线:spfa + 二分【路径中最大边长最小】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1614 题意: 给你一个无向图,n个点,m条边. 你需要找出一条从1到n的路径,使得这条路径 ...
- BZOJ——1614: [Usaco2007 Jan]Telephone Lines架设电话线
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1930 Solved: 823[Submit][Status][Discuss] Description ...
- 洛谷 [P1948] 电话线
二分答案 首先,最大值最小,就是二分答案 #include <iostream> #include <cstdio> #include <algorithm> #i ...
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线【二分+spfa】
二分答案,然后把边权大于二分值的的边赋值为1,其他边赋值为0,然后跑spfa最短路看是否满足小于等于k条边在最短路上 #include<iostream> #include<cstd ...
- BZOJ 1832、1787 洛谷 4281 [AHOI2008]紧急集合
[题解] 题目要求找到一个集合点,使3个给定的点到这个集合点的距离和最小,输出集合点的编号以及距离. 设三个点为A,B,C:那么我们可以得到Dis=dep[A]+dep[B]+dep[C]-dep[L ...
- BZOJ 1614 [Usaco2007 Jan]Telephone Lines架设电话线 (二分+最短路)
题意: 给一个2e4带正边权的图,可以免费k个边,一条路径的花费为路径上边权最大值,问你1到n的最小花费 思路: 对于一个x,我们如果将大于等于x的边权全部免费,那么至少需要免费的边的数量就是 “设大 ...
随机推荐
- oc70--NSArray1
// // main.m // NSArray是不可变的,一旦初始化完毕,就不能添加和删除了.类似于NSString和NSMutilString. #import <Foundation/Fou ...
- 【POJ 2503】 Babelfish
[题目链接] http://poj.org/problem?id=2503 [算法] 字符串哈希 [代码] #include <algorithm> #include <bitset ...
- element-ui table 页面加载时,动态渲染后台传过来的数据(springmvc)
jsp页面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> &l ...
- robotframework - 介绍&应用
一.参考简书链接 :https://www.jianshu.com/p/c3a9d20db4e5 二.介绍 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架, ...
- $CF41D\ Pawn$
\(problem\) 与这题 灰常的相似 然后内存可能过大 开个滚动数组 因为数塔问题总是 只需要上面一行的两个状态(这题就是数塔问题) 下面的代码与原题不符.(原题要输出路径)想抄的可以走了 输出 ...
- python之 文件操作
一.初识文件操作 使用python来读写文件是非常简单的操作,我们使用open函数来打开一个文件,获取到 文件句柄,然后通过文件句柄就可以进行各种各样的操作,同过打开方式的不同能够执行的 操作也会有相 ...
- 题解报告:hdu 1213 How Many Tables
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 Problem Description Today is Ignatius' birthday. ...
- RabbitMQ~消息的产生和管理(15672)
上一讲说了rabbitmq在windows环境的部署,而今天主要说一下消息在产生后,如何去查看消息,事实上,rabbitmq为我们提供了功能强大的管理插件,我们只要开启这个插件即可,它也是一个网站,端 ...
- VS开发C语言系列(零)-VS2013写C语言错误汇总
错误代码 error C3861:调用函数前未引用 error C4996:调用不安全的函数 error C2668:重载函数不明确 error C3861:"文件名" 找不到标识 ...
- MVC系列学习(十一)-客户端的验证
1.通过一个实例,来了解MVC中强大的验证功能 1.1新建一个 [基本] 的mvc项目,因为要用到验证的js,然后在一个视图中写上一下代码,以及Model中的代码如下 [注]在调用html.EditF ...