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. ACM-ICPC 2015 Shenyang Preliminary Contest B. Best Solver

    The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart. ...

  2. selenium2用AutoIt上传文件

    1.标签是input,如下图所示: WebElement e1= driver.findElement(By.id("load"));//输入要上传文件的地址e1.sendKeys ...

  3. Mysql显示所有数据库

    show databases; mysql> show databases; +--------------------+ | Database | +--------------------+ ...

  4. webdriver高级应用-使用JavaScript操作页面元素

    Webdriver搞不定的,需要用js,无需引入有关js的包就可用 在WebDriver脚本代码中执行JavaScript代码,来实现对页面元素的操作.此方法主要用于解决在某些情况下,页面元素的.cl ...

  5. [PDOException] SQLSTATE[HY000] [2002] No such file or directory

    编译安装PHP7之后,在安装mysql之后,用pdo操作数据库的时候,出现了此错误[PDOException] SQLSTATE[HY000] [2002] No such file or direc ...

  6. 换肤功能的实现以及监听storage实现多个标签页一起换肤

    1:需求:项目的侧边栏实现换肤功能,核心代码: updateSkin (val) { const existSkinLink = document.head.querySelector('link[i ...

  7. iOS启动动画效果实现

    原理 在window上加一个UIImageView它的图片和启动图的图片一样,然后再调整动画 运行展示 demo百度云连接:http://pan.baidu.com/s/1c0QcYu0 more:网 ...

  8. best coder #35-01<组合数学 || 概率数学>

    问题描述 一个盒子里有n个黑球和m个白球.现在DZY每次随机从盒子里取走一个球,取了n+m次后,刚好取完.DZY用这种奇怪的方法生成了一个随机的01串S[1⋯(n+m)].如果DZY第i次取出的球是黑 ...

  9. windows命令总结

    工作中还是经常使用windows系统,将windows中常用的命令进行总结. 1. 从命令行打开资源管理器,即文件夹 start . 2. 查看端口占用情况 比如查看3000端口的占用情况 netst ...

  10. iOS-OAuth认证

    OAuth授权 OAuth授权分四步: 第一步,应用向服务提供方申请请求令牌(Request Token),服务提供方验证通过后将令牌返回.这个步骤由于涉及到应用帐号密码,在应用的服务端发起,所以这个 ...