Telephone Lines
来源:互联网 发布:webpack优化 编辑:程序博客网 时间:2024/05/16 12:25
题目链接
题意:从1到n修一条电缆,有p条电缆可以连接,电话公司可以提供k条电缆,其他由john提供,求John提供的最长的电缆的长度,并使此长度尽量小。
可以用dijkstra算法,求出1到n走的最少的路的数量,设john支付的最长为L, 再用二分求得当路数>L的正好等于k时,此时L就是答案。
#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cstdlib>#include <cmath>#include <iterator>#include <cctype>#include <sstream>#include <string>#include <vector>#include <set>#include <map>#include <stack>#include <deque>#include <queue>#include <list>#include <functional>#include <ctime>//#pragma comment(linker, "/STACK:102400000, 102400000")#define debug puts("+******************************************************+")#define Min(a, b) ( (a < b) ? a : b )#define Max(a, b) ( (a > b) ? a : b )#define lc o<<1#define rc o<<1|1#define mem0(x) memset(x, 0, sizeof x)#define mem1(x) memset(x, -1, sizeof x)#define memf(x) memset(x, false, sizeof x)#define pb push_back#define X first#define Y second#define m_p make_pair#define MAXS 50000 + 8#define MAXT 10000 + 8#define MAXL 500000 + 8#define INF 0x3f3f3f3f#define inf -(1<<30)#define EPS 1e-20#define PI acos(-1.0)using namespace std;typedef long long LL;typedef unsigned long long uLL;typedef double DB;typedef pair<int , int > pii;const int MOD = 1e9 + 7;const int N = 1000 + 1;const int maxn = 1e6;int n,k, u, v, t, m, x , y, ans, p;int a, b, l, floyd[N][N];char c;string s, s2;struct Edge{ int to, cost; Edge() { } Edge(int to, int cost) : to(to), cost(cost) { }};vector< Edge > G[N];int d[N];int V, E;int dijkstra(int x){ priority_queue<pii, vector<pii>, greater<pii> > que; ///最小值优先 for (int i = 0;i <= n; i++) d[i] = INF; d[1] = 0; que.push( pii(0, 1) ); while ( !que.empty() ) { pii p = que.top(); que.pop(); int v = p.Y; if ( d[v] < p.X )continue; for (int i = 0; i < G[v].size(); i++) { Edge e = G[v][i]; int dd = d[v] + (e.cost >= x ? 1 : 0); if ( d[e.to] > dd ) { d[e.to] = dd; que.push( pii(d[e.to], e.to ) ); } } } return d[V];}int main(){ scanf("%d%d%d", &n, &p, &k); V = n; E = p; for (int i = 0;i < p; i++) { scanf("%d%d%d", &a, &b, &l); G[a].pb( Edge(b, l) ); G[b].pb( Edge(a, l) ); } int low = 0, high = maxn + 9; while ( low < high - 1 ) { int mm = low + ((high - low) >> 1); if ( dijkstra(mm ) > k ) low = mm; else high = mm; } printf("%d\n", low > maxn ? -1 : low ); return 0;}
0 0
- Telephone Lines
- POJ 3662 Telephone Lines
- POJ 3662: Telephone Lines
- POJ-3662-Telephone Lines
- POJ3662--Telephone Lines
- POJ 3662 Telephone Lines
- POJ-3662Telephone Lines
- POJ 3662 Telephone Lines
- POJ3662-Telephone Lines
- [Usaco08Jan&luogu1948] Telephone Lines
- POJ3662-Telephone Lines
- poj3662 Telephone Lines
- Poj3662 Usaco2008JanSilver Telephone Lines
- Telephone Lines POJ
- poj 3662 Telephone Lines 图论
- 【USACO08JAN】洛谷1948 Telephone Lines
- POJ Telephone Lines 二分+dijkstra
- Poj3662 Telephone Lines (限制最短路)
- 树莓派搭建TensorFlow
- C++第一次上机实验-两点距离
- Java_basic-环境变量的配置
- LeetCode : Delete Node in a Linked List
- 深入理解C# 静态类与非静态类、静态成员的区别
- Telephone Lines
- 【Git之窗】(二)记我为“Arquillian”开源框架贡献的一行源码
- 从LeNet到AlexNet
- 解决ssh连接慢
- wm命令使用方法(修改android 分辨率)修改
- net4.0创建asp.net empty web application如何发布(英文)
- iOS开发-NSOperation与GCD区别
- Atheros开源驱动发展历史的介绍
- http的一些原理