1700 施工方案第二季

2012年市队选拔赛北京

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

c国边防军在边境某处的阵地是由n个地堡组成的。工兵连受命来到阵地要进行两期施工。

第一期的任务是挖掘暗道让所有地堡互联互通。现已勘测设计了m条互不相交的暗道挖掘方案,如果这m条暗道都实施挖掘,肯定能达到互联互通的目的。事实上,适当选择其中n-1个方案挖掘,就能实现互联互通,即从每个地堡出发都能到达其他任何一个地堡(允许经过别的地堡)。

连长精心谋算,在m个设计规划中选取了挖掘总距离最短且能保证互联互通的若干个暗道规划实施了挖掘,完成了第一期的施工任务后又接受了第二期的施工任务,要求选择一个地堡进行扩建改造,使其能向每个地堡提供弹药。为了让弹药供应更及时、更快捷,从改扩建的地堡到最远地堡的距离(称为最远输送距离)应当尽量小。

你的任务是先求出第一期施工挖掘的总距离,再求改扩建地堡最远输送距离的最小值。

输入描述 Input Description

其中第一行是n和m,m>=n
下面的m行每行3个数xi、yi、zi,表示xi到yi的距离是zi
  zi<1000000且m个距离互不相等

输出描述 Output Description

共包含两行,每行一个整数,
第一行是第一期的挖掘总距离,第二行是最远输送距离的最小值。

样例输入 Sample Input

4 5
1 2 1
2 3 2
3 4 3
4 1 4
3 1 5

样例输出 Sample Output

6
3

数据范围及提示 Data Size & Hint

【样例说明】
第一期挖掘1到2、2到3和3到4的3条暗道,第二期选择3号地堡进行改扩建,最远输送距离是3
【数据规模】
60%的数据 n<10且m<20
80%的数据 n<1000且m<2000
100%的数据 n<100000且m<200000

第一问最小生成树(废话!)

第二问要跑一遍树的直径(这是必然,既然保证是树的直径,就说明这条路径中一定存在我们要求的最长路径,然后我们在这条直径上找里是最长路径最短的点)

鬼畜:一直过不了,但是一直wa的数据本蒟蒻可以跑出来!太鬼畜了、、(最重要的是他显示我RE,可是我数组开的够大了啊!)

(有哪位大神看出来哪错了记得跟蒟蒻说声)

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 210000
using namespace std;
bool vis[N];
int ans1,ans2,dis[N];
],root;
int read()
{
    ,f=; char ch=getchar();
    ; ch=getchar();}
    +ch-'; ch=getchar();}
    return x*f;
}
struct Edge
{
    int x,y,z;
}edge[N<<];
struct Edge1
{
    int next,to,dis;
}edge1[N];
int cmp(Edge a,Edge b)
{
    return a.z<b.z;
}
int find(int x)
{
    if(x==fa[x]) return x;
    fa[x]=find(fa[x]);
}
int add(int x,int y,int z)
{
    tot++;
    edge1[tot].to=y;
    edge1[tot].dis=z;
    edge1[tot].next=head[x];
    head[x]=tot;
}
void dfs(int x)
{
    for(int i=head[x];i;i=edge1[i].next)
    {
        int to=edge1[i].to;e=to;
        if(vis[to]||fa[x]==to) continue;
         fa[to]=x;
        dis[to]=dis[x]+edge1[i].dis;
        dfs(to);
    }
}
int work(int x)
{
    if(fa[x]) work(fa[x]);
    ans2=min(ans2,max(dis[x],dis[t]-dis[x]));
}
int main()
{
    n=read(),m=read();
    ;i<=m;i++)
    {
        x=read(),y=read(),z=read();
        edge[i].x=x;
        edge[i].y=y;
        edge[i].z=z;
    }
    ;i<=n;i++) fa[i]=i;
    sort(edge+,edge++m,cmp);
    ;i<=m;i++)
    {
        x=edge[i].x,y=edge[i].y;
        int fx=find(x),fy=find(y);
        if(fa[fx]==fy) continue;
        fa[fx]=fy;add(x,y,edge[i].z),add(y,x,edge[i].z);
        ans1+=edge[i].z;
        ) break;
    }
    memset(fa,,sizeof(fa));
    dfs();
    ;i<=n;i++)
     if(dis[i]>dis[root]) root=i;
    memset(fa,,sizeof(fa));
    memset(dis,,sizeof(dis));
    dfs(root); t=root;
    ;i<=n;i++)
     if(dis[i]>dis[t]) t=i;
    ans2=dis[t];work(t);
    printf("%d\n%d",ans1,ans2);
    ;
}

一直过不了的40分代码

#include <algorithm>
#include <cstring>
#include <cstdio>

#define LL long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
inline void read(int &x)
{
    x=; register char ch=getchar();
    '; ) ch=getchar();
    +ch-';
}
+);
+);
int n,m,head[N],sumedge;
struct Edge {
    int v,next,w;
    Edge(,,):v(v),next(next),w(w){}
}edge[N<<];
struct Road {
    int u,v,w;
    bool operator < (const Road x)const
    {
        return w<x.w;
    }
    Road(,,):u(u),v(v),w(w){}
}road[M];
inline void ins(int u,int v,int w)
{
    edge[++sumedge]=Edge(v,head[u],w);
    head[u]=sumedge;
}

int fa[N];
int find(int x)
{
    return x==fa[x]?x:fa[x]=find(fa[x]);
}
inline LL K_for_get_road()
{
    ;
    LL ret=;
    std::sort(road+,road+m+);
    ; i<=n; ++i) fa[i]=i;
    ; i<=m; ++i)
    {
        fx=find(road[i].u),fy=find(road[i].v);
        if(fx==fy) continue;
        fa[fx]=fy;        ret+=(LL)road[i].w;
        ins(road[i].u,road[i].v,road[i].w);
        ins(road[i].v,road[i].u,road[i].w);
        ) return ret;
    }
    return ret;
}

LL val[N],ans;
int s,t,pre[N];
void DFS(int u)
{
    for(int x,v,i=head[u]; i; i=edge[i].next)
    {
        v=edge[i].v;
        if(v==pre[u]) continue;
        val[v]=val[u]+(LL)edge[i].w;
        pre[v]=u;    DFS(v);
    }
}
void Get(int u)
{
    if(pre[u]) Get(pre[u]);
    ans=min(ans,max(val[u],val[t]-val[u]));
}

int Presist()
{
    read(n),read(m);
    ; i<=m; ++i)
        read(u),read(v),read(w),road[i]=Road(u,v,w);
    printf("%lld\n",K_for_get_road());

    DFS(s=);
    ; i<=n; ++i) if(val[i]>val[s]) s=i;
    memset(val,,sizeof(val));
    memset(pre,,sizeof(pre));
    DFS(s);t=;
    ; i<=n; ++i) if(val[i]>val[t]) t=i;
    ans=val[t];    Get(t);
    printf("%lld\n",ans);
    ;
}

int Aptal=Presist();
int main(){;}

粘个代码

codevs——1700 施工方案第二季的更多相关文章

  1. codevs 1700 施工方案第二季

    1700 施工方案第二季 2012年市队选拔赛北京  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description c国边防 ...

  2. CODEVS——T 1700 施工方案第二季

    http://codevs.cn/problem/1700/ 2012年市队选拔赛北京  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果   ...

  3. codevs1700 施工方案第二季

    题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ...

  4. COJ262 HDNOIP201206施工方案

    HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...

  5. HDNOIP201206施工方案

    HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...

  6. [转][南京米联ZYNQ深入浅出]第二季更新完毕课程共计16节课

    [南京米联]ZYNQ第二季更新完毕课程共计16节课 [第二季ZYNQ]                                                                  ...

  7. 【第二季】CH11_ ZYNQ软硬调试高级技巧

    [第二季]CH11_ ZYNQ软硬调试高级技巧 软件和硬件的完美结合才是SOC的优势和长处,那么开发ZYNQ就需要掌握软件和硬件开发的调试技巧,这样才能同时分析软件或者硬件的运行情况,找到问题,最终解 ...

  8. [第二季ZYNQ] [南京米联]ZYNQ第二季更新完毕课程共计16节课

    ZYNQ第二季更新完毕课程共计16节课全部免费 [第二季ZYNQ]                                                                    ...

  9. 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]

    天猫旗下的天猫食品与央视CCTV-1栏目<舌尖上的中国>第二季(以下简称“舌尖2”)达成合作,天猫食品成为舌尖2独家合作平台,同步首发每期 节目中的食材和美食菜谱,舌尖2摄制组还将为同步上 ...

随机推荐

  1. vim中,在编辑模式下如何快速移动光标

    编辑 ~/.vimrc 配置文件,加入如下行,编辑模式下自定义的快捷键 inoremap <C-o> <Esc>o  inoremap <C-l> <Righ ...

  2. python GIL锁、进程池与线程池、同步异步

    一.GIL全局解释器锁 全局解释器锁 在CPython中,全局解释器锁(GIL)是一个互斥锁,它可以防止多个本机线程同时执行Python代码.之所以需要这个锁,主要是因为CPython的内存管理不是线 ...

  3. python 项目中包中__init__.py文件的作用

    开发python项目时,我遇到了一个这样的现象,当我新建一个pythonpackage时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很不了解这个空文件的作用是什么, ...

  4. bin、hex、elf、axf文件的区别

    1.bin Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式".按照assembly code顺序翻译成binary machine code,内部没有地址标记.Bin是直 ...

  5. poj-2386 lake counting(搜索题)

    Time limit1000 ms Memory limit65536 kB Due to recent rains, water has pooled in various places in Fa ...

  6. Mysql源码编译安装&主从复制

    一)camke源码编译安装mysql 1)创建软件安装目录software [root@master software]# ls cmake-2.8.8.tar.gz mysql-5.5.32.tar ...

  7. 关于mysql中select出数据未排序问题

    来自  mysql必知必会

  8. dwr介绍及配置

    DWR 编辑 DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的 ...

  9. LiveScript 流程控制、循环以及列表推导式

    The LiveScript Book     The LiveScript Book Generators and Yield 你可以在你的 LiveScript 代码中使用 Ecmascript ...

  10. 【转】javascript操作Select标记中options集合

    先来看看options集合的这几个方法:options.add(option)方法向集合里添加一项option对象:options.remove(index)方法移除options集合中的指定项:op ...