二分答案

首先,最大值最小,就是二分答案

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN = 10005;
int head[MAXN], nume, n, m, k, l, r, mid, dis[MAXN];
bool f[MAXN];
struct edge {
int to, nxt, dis;
}e[MAXN << 1];
void adde(int from, int to, int dis) {
e[++nume].to = to;
e[nume].nxt = head[from];
e[nume].dis = dis;
head[from] = nume;
}
queue <int> q;
bool chk(int x) {
memset(dis, 0x3f, sizeof(dis));
memset(f, 0, sizeof(f));
dis[1] = 0;
q.push(1);
while(!q.empty()) {
int u = q.front();q.pop();
for(int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
int t = (e[i].dis > x);
if(dis[v] > dis[u] + t) {
dis[v] = dis[u] + t;
q.push(v);
}
}
}
//cout << dis[n] << endl;
return (dis[n] <= k);
}
int main() {
cin >> n >> m >> k;
for(int i = 1; i <= m; i++ ){
int u, v, di;
cin >> u >> v >> di;
r = max(r, di);
adde(u, v, di); adde(v, u, di);
}
int t = r;
while(l <= r) {
mid = (l + r) >> 1;
//printf("%d %d %d\n", l, r, mid);
if(chk(mid)) {
r = mid - 1;
}else l = mid + 1;
}
if(l <= t) cout << l << endl;
else cout << -1 << endl;
return 0;
}

还可以用 DP 的思路, 在SPFA中转移

也可以对于每种情况,建点连边,跑最短路

洛谷 [P1948] 电话线的更多相关文章

  1. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  2. 【洛谷P1948】[USACO08JAN]电话线

    电话线 题目链接:https://www.luogu.org/problemnew/show/P1948 二分答案+最短路 我们要求一条1~n的路径,使其中的第k+1大的数最小. 二分第k+1大的数的 ...

  3. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 题解

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  4. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 最短路+二分答案

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1948 [USACO08JAN]电话线Telephone ...

  5. 洛谷P1948 [USACO08JAN]电话线Telephone Lines

    题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is u ...

  6. 题解【洛谷P1948】[USACO08JAN]电话线Telephone Lines

    题面 题解 很显然,答案满足单调性. 因此,可以使用二分答案求解. 考虑\(check\)的实现. 贪心地想,免费的\(k\)对电话线一定都要用上. 每次\(check\)时将小于\(mid\)的边权 ...

  7. [USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948

    这道题其实是分层图,但和裸的分层图不太一样.因为它只要求路径总权值为路径上最大一条路径的权值,但仔细考虑,这同时也满足一个贪心的性质,那就是当你每次用路径总权值小的方案来更新,那么可以保证新的路径权值 ...

  8. BZOJ 1614 USACO 07Jan. 洛谷1948 电话线

    二分+特殊姿势的check:二分最小代价P,把边权小于等于P的边设为0,其他的设为1,跑一遍最短路,判断dis[n]是否大于K #include<cstdio> #include<a ...

  9. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

随机推荐

  1. Luogu P2073 送花

    权值线段树的模板题 然而AC后才发现,可以用\(\tt{set}\)水过-- 权值线段树类似于用线段树来实现平衡树的一些操作,代码实现还是比较方便的 #include<iostream> ...

  2. 学习笔记(五): Feature Crosses

    目录 Feature Crosses Encoding Nonlinearity Kinds of feature crosses Glossay Crossing One-Hot Vectors P ...

  3. Unity学习之路——主要类

    学习https://blog.csdn.net/VRunSoftYanlz/article/details/78881752 1.Component类gameObject:组件附加的游戏对象.组件总是 ...

  4. 【二分 最小割】cf808F. Card Game

    Digital collectible card games have become very popular recently. So Vova decided to try one of thes ...

  5. 【思维题 并查集 图论】bzoj1576: [Usaco2009 Jan]安全路经Travel

    有趣的思考题 Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第 ...

  6. 如何用 CSS 和 D3 创作旋臂粒子动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xJrOqd 可交互视频 ...

  7. windows 2008r2+php5.6.28环境搭建详细过程

    安装IIS7 安装php 网站验证 安装IIS7 1.打开服务器管理器(开始-计算机-右键-管理-也可以打开),添加角色 直接下一步 勾选Web服务器(IIS),下一步,有个注意事项继续下一步(这里我 ...

  8. POJ:1094-Sorting It All Out(拓扑排序经典题型)

    Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Description An ascending sorted sequence ...

  9. 并查集:POJ1182-食物链(并查集比较高端的应用)

    食物链 Time Limit: 1000MS Memory Limit: 10000K Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C ...

  10. win7 怎么进入注册表

    windows图标键(就是ALT旁边的windows小旗子)+R键----输入"regedit"---回车