POJ3662或洛谷1948 Telephone Lines
二分答案+单源最短路
POJ原题链接
洛谷原题链接
显然可以二分答案,检验\(mid\)可以使用最短路来解决。
将大于\(mid\)的边看成长度为\(1\)的边,说明要使用免费升级服务,否则长度为\(0\)边,即不需要占免费的资格。
然后就可以在上面跑最短路,如果\(dis[n]>k\)说明该答案不可行,将答案改大,否则说明可行,往小的去尝试。
而针对长度只有\(0,1\)的图可以使用双端队列的\(BFS\)来解决,不过我这种懒人就直接跑\(SPFA\)了。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1010;
const int M = 1e4 + 10;
int fi[N], ne[M << 1], di[M << 1], da[M << 1], dis[N], a[M], q[M << 1], l, k, n;
bool v[N];
int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c<'0' || c>'9'; c = getchar())
p = (c == '-' || p) ? 1 : 0;
for (; c >= '0'&&c <= '9'; c = getchar())
x = x * 10 + (c - '0');
return p ? -x : x;
}
inline void add(int x, int y, int z)
{
di[++l] = y;
da[l] = z;
ne[l] = fi[x];
fi[x] = l;
}
bool judge(int o)
{
memset(dis, 60, sizeof(dis));
memset(v, 0, sizeof(v));
int i, x, y, z, head = 0, tail = 1;
dis[1] = 0;
q[1] = 1;
while (head != tail)
{
x = q[++head];
v[x] = 0;
for (i = fi[x]; i; i = ne[i])
{
y = di[i];
z = da[i] > o ? 1 : 0;
if (dis[y] > dis[x] + z)
{
dis[y] = dis[x] + z;
if (!v[y])
{
q[++tail] = y;
v[y] = 1;
}
}
}
}
if (dis[n] > k)
return false;
return true;
}
int main()
{
int i, m, x, y, ll, r, mid, an = -1;
n = re();
m = re();
k = re();
for (i = 1; i <= m; i++)
{
x = re();
y = re();
a[i] = re();
add(x, y, a[i]);
add(y, x, a[i]);
}
sort(a + 1, a + m + 1);
ll = 0;
r = m;
while (ll <= r)
{
mid = (ll + r) >> 1;
if (judge(a[mid]))
{
r = mid - 1;
an = a[mid];
}
else
ll = mid + 1;
}
printf("%d", an);
return 0;
}
POJ3662或洛谷1948 Telephone Lines的更多相关文章
- BZOJ 1614 USACO 07Jan. 洛谷1948 电话线
二分+特殊姿势的check:二分最小代价P,把边权小于等于P的边设为0,其他的设为1,跑一遍最短路,判断dis[n]是否大于K #include<cstdio> #include<a ...
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines
P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 题解
P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 最短路+二分答案
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1948 [USACO08JAN]电话线Telephone ...
- POJ3662 Telephone Lines( dijkstral + 二分 )
POJ3662 Telephone Lines 题目大意:要在顶点1到顶点n之间建一条路径,假设这条路径有m条边,其中有k条边是免费的,剩余m-k条边是要收费的, 求这m-k条边中花费最大的一条边的最 ...
- poj-3662 Telephone Lines 二分答案+最短路
链接:洛谷 POJ 题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone co ...
- poj3662 Telephone Lines【最短路】【二分】
http://poj.org/problem?id=3662 Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- USACO Telephone Lines
洛谷 P1948 [USACO08JAN]电话线Telephone Lines https://www.luogu.org/problem/P1948 JDOJ 2556: USACO 2008 Ja ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
随机推荐
- ASP.NET 散碎知识
1.按钮点击打开一个新的Web窗体,可在按钮点击事件里面写:Response.Redirect("窗体的名字.aspx"); 2.复合控件: CheckBoxList - 复选框组 ...
- 构建BSP (boardsupport packet)
由于移植期间遇到较多头文件包含及常量定义问题,故在此总结如下: 常量定义一般涉及到寄存器定义.寄存器配置常量定义,寄存器配置常量一般在驱动目录下自定义,所以如果编译过程中出现常量未定义的情况一般是属于 ...
- k8s 创建deployment流程
pod 创建流程https://blog.csdn.net/yan234280533/article/details/72567261 api server -> etcd -> cont ...
- SQL语句中LEFT JOIN、JOIN、INNER JOIN、RIGHT JOIN的区别?
w3school的一套sql教程: http://www.w3school.com.cn/sql/index.asp left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录.r ...
- 解题9(StringReversedOrder)
题目描述 将一个英文语句以单词为单位逆序排放.例如“I am a boy”,逆序排放后为“boy a am I”所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符 接口说明 /** * ...
- mybatis 插件安装与使用
安装 1.在MarketPlace 中搜索 MyBatipse 安装 2.下载MyBatipse 插件 使用 ......
- Pandas汇总和处理缺失数据
汇总的函数 方法 说明 count 非NA的值数量 describe 针对Series和DataFrame列计算汇总统计 min.max 计算最小值和最大值 argmin.argmax 计算能够获取到 ...
- spring中的bean的属性scope
spring中bean的scope属性,有如下5种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 prototype表示每次获得be ...
- LibreOJ 6282. 数列分块入门 6
题目链接:https://loj.ac/problem/6282 参考博客:http://www.cnblogs.com/stxy-ferryman/p/8560551.html 这里如果用数组的话元 ...
- python爬虫相关基础概念
什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫 1.php:可以实现爬虫.但是php在实现爬虫中支持多线程和多进程方面做得不好. 2.java ...