P1948 [USACO08JAN]电话线Telephone Lines

原创 2018年04月16日 13:58:28

题目大意:

多年以后,笨笨长大了,成为了电话线布置师。由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人。该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意两根线杆之间没有电话线连接,一共有p(1<=p<=10000)对电话杆可以拉电话线。其他的由于地震使得无法连接。

第i对电线杆的两个端点分别是ai,bi,它们的距离为li(1<=li<=1000000)。数据中每对(ai,bi)只出现一次。编号为1的电话杆已经接入了全国的电话网络,整个市的电话线全都连到了编号N的电话线杆上。也就是说,笨笨的任务仅仅是找一条将1号和N号电线杆连起来的路径,其余的电话杆并不一定要连入电话网络。

电信公司决定支援灾区免费为此市连接k对由笨笨指定的电话线杆,对于此外的那些电话线,需要为它们付费,总费用决定于其中最长的电话线的长度(每根电话线仅连接一对电话线杆)。如果需要连接的电话线杆不超过k对,那么支出为0.

请你计算一下,将电话线引导震中市最少需要在电话线上花多少钱?

思路:

我们可以二分一个值,高于他的就要用到电话线,那么跑一次最短路,如果最短路是大于K的那么就把二分的值调高,小于K就是合法的。

程序:

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<cstring>
#define N 1000000
using namespace std;
int last[N],cnt,ans,n,p,k,dis[N],x,y,z;
struct data{int w,to,next;}e[N];
queue <int> q;
void add(int x,int y,int w){
    e[++cnt].to=y; e[cnt].w=w; e[cnt].next=last[x]; last[x]=cnt;
    e[++cnt].to=x; e[cnt].w=w; e[cnt].next=last[y]; last[y]=cnt;
}

bool cheak(int x,int y){
    if (x>y) return 1;
    return 0;
}

bool spfa(int x){
    while (!q.empty()) q.pop();
    q.push(1);
    memset(dis,0x3f,sizeof(dis));
    dis[1]=0;
    while (!q.empty()){
        int u=q.front();
        q.pop();
        for (int i=last[u];i;i=e[i].next)
        if (dis[u]+cheak(e[i].w,x)<dis[e[i].to]){
            dis[e[i].to]=dis[u]+cheak(e[i].w,x);
            q.push(e[i].to);
        }
    }
    if (dis[n]<=k) return 1;
    return 0;
}

int main(){
    scanf("%d%d%d",&n,&p,&k);
    for (int i=1;i<=p;i++){
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
    }
    int l=1,r=1000000;
    ans=-1;
    while (l!=r){
        int mid=(l+r)>>1;
        if (!spfa(mid)) l=mid+1;
                else r=mid,ans=mid; 
    }
    if (ans==-1) printf("-1");
            else printf("%d",ans); 
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq872425710/article/details/79959718

洛谷 P1948 [USACO08JAN]电话线Telephone Lines

二分+spfa
  • Rlt1296
  • Rlt1296
  • 2016-11-18 18:54:46
  • 269

luogu P1948 [USACO08JAN]电话线Telephone Lines

反正闲着也是闲着,不如再写一篇颓废史。 这是一道二分答案加spfa的题, 然而我在做的时候,不知道那位dalao贴了一个“搜索”标签,于是乎,本来就是搜索标签的我按搜索做了 然后就A掉了。(我自己也是...
  • manbell_shaw
  • manbell_shaw
  • 2017-10-23 21:18:37
  • 31

[USACO08JAN]电话线Telephone Lines 洛谷P1948

有思路,有源码,不防偷看XD
  • The_Dark_Archon
  • The_Dark_Archon
  • 2017-06-01 22:20:06
  • 192

洛谷P1948 [USACO08JAN]电话线Telephone Lines

题目描述Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is un...
  • stone41123
  • stone41123
  • 2017-07-01 20:39:14
  • 132

洛谷 P1948 [USACO08JAN]电话线Telephone Lines【NOIP模拟笨笨的电话线】

[二分,spfa chenck] 题目描述Farmer John wants to set up a telephone line at his farm. Unfortunately, the p...
  • lfrun
  • lfrun
  • 2016-10-27 08:26:10
  • 294

洛谷 1948 [USACO08JAN]电话线Telephone Lines

题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is ...
  • qq_35776409
  • qq_35776409
  • 2017-08-10 21:50:15
  • 162

POJ3662,洛谷1948 [USACO08JAN]电话线Telephone Lines

一叶落寞,万物失色。 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone compa...
  • jc514984625
  • jc514984625
  • 2017-04-15 13:11:15
  • 228

[BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线

[Usaco2007 Jan]Telephone Lines架设电话线时间限制: 1 Sec 内存限制: 128 MB题目描述Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他...
  • slongle_amazing
  • slongle_amazing
  • 2015-07-10 23:14:10
  • 428

[BZOJ1705] [Usaco2007 Nov]Telephone Wire 架设电话线

DP+辅助数组优化
  • icecathy
  • icecathy
  • 2016-10-09 12:57:04
  • 293
收藏助手
不良信息举报
您举报文章:P1948 [USACO08JAN]电话线Telephone Lines
举报原因:
原因补充:

(最多只允许输入30个字)