zoukankan      html  css  js  c++  java
  • codevs 3336 电话网络

    3336 电话网络(二分+最短路)

     时间限制: 1 s
     空间限制: 32000 KB
     题目等级 : 黄金 Gold
    题目描述 Description

    由于地震使得连接汶川县城电话线全部损坏,假如你是负责将电话线接到震中汶川县城的负责人,汶川县城周围分布着N(1≤N≤1,000)根按 1..N 顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1≤P≤10,000)对电话线杆间可以拉电话线,其余的由于地震使得无法被连接。

    第i对电话线杆的两个端点分别为Ai,Bi,它们间的距离为Li(1≤Li≤1,000,000)。数据中保证每对(Ai,Bi)最多只出现1次。编号为1的电话线杆已经接人了全国的电话网络,整个县城的电话线全都连到了编号为N的电话线杆上。也就是说,你的任务仅仅是找一条将1号和N号电话线杆连起来的路径,其余的电话线杆并不一定要连人电话网络。

    电信公司决定支援灾区免费为汶川县城连结K(0≤K<N)对由你指定的电话线杆。对于此外的那些电话线,需要为它们付费,总费用等于其中最长的电话线的长度(每根电话线仅连接一对电话线杆)。如果需要连接的电话线杆不超过K对,那么总支出为0。

    请你计算一下,将电话线引到震中汶川县城最少需要在电话线上花多少钱?

    输入描述 Input Description

    输入文件的第一行包含三个用空格隔开的整数:N,P和K。

    第二行到第P+1行:每行分别都为空格隔开的整数:Ai,Bi和Li。

    输出描述 Output Description

    输出文件中仅包含一个整数,表示在这项工程上的最小支出。如果任务不可能完成,则输出-1。

    样例输入 Sample Input

    5 7 1

    1 2 5

    3 1 4

    2 4 8

    3 2 3

    5 2 9

    3 4 7

    4 5 6

    样例输出 Sample Output

    4

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<queue>
     5 
     6 #define N 1000000+20
     7 
     8 using namespace std;
     9 
    10 int n,m,k,num,head[N];
    11 bool inq[N];
    12 int dis[N];
    13 struct node
    14   {
    15       int u,v,t,pre;
    16   }a[N];
    17 
    18 void add_tree(int,int,int);
    19 void SPFA(int);
    20 void init(); 
    21 
    22 int main()
    23   {
    24       init();
    25     int l=0,r=N,ans=-1;
    26       while(l<=r)
    27         {
    28             memset(inq,0,sizeof(inq));
    29             memset(dis,127/3,sizeof(dis));
    30             int mid=(l+r)/2;
    31             SPFA(mid);
    32             if(dis[n]<=k)
    33               {
    34                   ans=mid;
    35                   r=mid-1;
    36               }
    37             else
    38               l=mid+1;
    39         }
    40     printf("%d",ans);
    41       return 0;
    42   }
    43 
    44 void add_tree(int from,int to,int ll)
    45   {
    46       num++;
    47       a[num].u=from;
    48       a[num].v=to;
    49       a[num].t=ll;
    50       a[num].pre=head[from];
    51       head[from]=num;
    52   }
    53 
    54 void SPFA(int s)
    55   {
    56       queue<int>q;
    57       dis[1]=0;
    58       inq[1]=0;
    59       q.push(1);
    60       while(!q.empty())
    61         {
    62             int p=q.front();
    63             q.pop();
    64             inq[p]=0;
    65             for(int i=head[p];i;i=a[i].pre)
    66               {
    67                   int si;
    68                   if(a[i].t<=s)
    69                 si=0;
    70             else 
    71                  si=1;
    72                 if(dis[a[i].v]>dis[p]+si)
    73                   {
    74                     dis[a[i].v]=dis[p]+si;
    75                 if(inq[a[i].v]==0)
    76                   {
    77                     q.push(a[i].v);
    78                     inq[a[i].v]=1;
    79                   }
    80               }
    81         }
    82       
    83   }
    84 }
    85 
    86 void init()
    87   {
    88       scanf("%d%d%d",&n,&m,&k);
    89       for(int i=1;i<=m;i++)
    90         {
    91             int x,y,z;
    92             scanf("%d%d%d",&x,&y,&z);
    93             add_tree(x,y,z);
    94             add_tree(y,x,z);
    95         }
    96   }
  • 相关阅读:
    软件部门每年耗资大约100亿到200多亿美元,但没有研发出任何具有说服力的产品,因此华为决定关闭
    Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good
    linux 下用find命令查找文件,rm命令删除文件
    北电之死:谁谋杀了华为的对手?——银湖资本(Silver Lake)董事总经理爱德华·詹德出任CEO,既不了解华为,也不重视中国,直截了当地否决了收购华为
    搞定JavaScript正则表达式
    Orleans3.0
    CSS盒模型
    作用域和闭包
    NServiceBus是.Net平台下的开源的消息服务框架
    [1]System.Reflection.Emit
  • 原文地址:https://www.cnblogs.com/yuemo/p/5571377.html
Copyright © 2011-2022 走看看