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. Python 基本数据类型 (二) - 字符串1

    # ----------- 首字母大写 ---------- test = "alex is a man" v = test.capitalize() print(v): Alex ...

  2. leetcode-21-knapsack

    322. Coin Change Write a function to compute the fewest number of coins that you need to make up tha ...

  3. poj--1064

    题意:有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的绳子的话,这K条绳子最长能有多长?答案保留到小数点后2位. 思路:这些最大最小化问题大多数可以用二分查找的方法来解题 用 d 表 ...

  4. CSS 工程化 小结

    CSS 工程化 组成:1.组织 (代码目录)2.优化(那种实现方式更好) 3.构建(代码完成后需要经过哪些处理步骤) 4.维护 常见问题 1.如何解决 CSS 模块化问题 1.Less Sass 等C ...

  5. day02 Python 的模块,运算,数据类型以及方法

    初识pyhton的模块: 什么是模块: 我的理解就是实现一个功能的函数,把它封装起来,在你需要使用的时候直接调用即可,我的印象里类似于shell 的单独函数脚本. python 的模块分为标准的和第三 ...

  6. PHP 函数 ignore_user_abort()

    ignore_user_abort 设置与客户机断开是否会终止脚本的执行.   本函数返回 user-abort 设置的之前的值(一个布尔值). int ignore_user_abort ([ st ...

  7. [错误处理]UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

    Stackoverflow 回答: 将byte类型转化:byte_string.decode('utf-8') Jinja2 is using Unicode internally which mea ...

  8. Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) A. The King's Race

    http://codeforces.com/contest/1075/problem/A On a chessboard with a width of nn and a height of nn, ...

  9. kb-07专题线段树-04--离散化;

    /* poj2528 线段树 好题,用到了离散化,二分定位,特殊的区间查寻方式:在下面的代码注释中有详细的解释: */ #include<iostream> #include<cst ...

  10. java面试题之spring aop中jdk和cglib哪个动态代理的性能更好?

    在jdk6和jdk7的时候,jdk比cglib要慢: 在jdk8的时候,jdk性能得到提升比cglib要快很多: 结论出自:https://www.cnblogs.com/xuliugen/p/104 ...