codevs——1700 施工方案第二季
c国边防军在边境某处的阵地是由n个地堡组成的。工兵连受命来到阵地要进行两期施工。
第一期的任务是挖掘暗道让所有地堡互联互通。现已勘测设计了m条互不相交的暗道挖掘方案,如果这m条暗道都实施挖掘,肯定能达到互联互通的目的。事实上,适当选择其中n-1个方案挖掘,就能实现互联互通,即从每个地堡出发都能到达其他任何一个地堡(允许经过别的地堡)。
连长精心谋算,在m个设计规划中选取了挖掘总距离最短且能保证互联互通的若干个暗道规划实施了挖掘,完成了第一期的施工任务后又接受了第二期的施工任务,要求选择一个地堡进行扩建改造,使其能向每个地堡提供弹药。为了让弹药供应更及时、更快捷,从改扩建的地堡到最远地堡的距离(称为最远输送距离)应当尽量小。
你的任务是先求出第一期施工挖掘的总距离,再求改扩建地堡最远输送距离的最小值。
其中第一行是n和m,m>=n
下面的m行每行3个数xi、yi、zi,表示xi到yi的距离是zi
zi<1000000且m个距离互不相等
共包含两行,每行一个整数,
第一行是第一期的挖掘总距离,第二行是最远输送距离的最小值。
4 5
1 2 1
2 3 2
3 4 3
4 1 4
3 1 5
6
3
【样例说明】
第一期挖掘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 施工方案第二季的更多相关文章
- codevs 1700 施工方案第二季
1700 施工方案第二季 2012年市队选拔赛北京 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description c国边防 ...
- CODEVS——T 1700 施工方案第二季
http://codevs.cn/problem/1700/ 2012年市队选拔赛北京 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 ...
- codevs1700 施工方案第二季
题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ...
- COJ262 HDNOIP201206施工方案
HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...
- HDNOIP201206施工方案
HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...
- [转][南京米联ZYNQ深入浅出]第二季更新完毕课程共计16节课
[南京米联]ZYNQ第二季更新完毕课程共计16节课 [第二季ZYNQ] ...
- 【第二季】CH11_ ZYNQ软硬调试高级技巧
[第二季]CH11_ ZYNQ软硬调试高级技巧 软件和硬件的完美结合才是SOC的优势和长处,那么开发ZYNQ就需要掌握软件和硬件开发的调试技巧,这样才能同时分析软件或者硬件的运行情况,找到问题,最终解 ...
- [第二季ZYNQ] [南京米联]ZYNQ第二季更新完毕课程共计16节课
ZYNQ第二季更新完毕课程共计16节课全部免费 [第二季ZYNQ] ...
- 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]
天猫旗下的天猫食品与央视CCTV-1栏目<舌尖上的中国>第二季(以下简称“舌尖2”)达成合作,天猫食品成为舌尖2独家合作平台,同步首发每期 节目中的食材和美食菜谱,舌尖2摄制组还将为同步上 ...
随机推荐
- DC课程目标
- Python基础——模块与包
在Python中,可以用import导入需要的模块.包.库.文件等. 把工作路径导入系统路径 import os#os是工作台 import sys#sys是系统 sys.path.append(os ...
- Python头脑风暴1
发个致富脑洞:我就在想本人虽然单身,但本人恋爱经历很多,追女生技术十足,女朋友漂亮又贤惠.如果本人开个平台帮人诚心介绍女朋友,男女成男女朋友经男方同意我收2.5万(IT界平均月收入的1.5倍不到),双 ...
- SQL登录注册练习
/class User package com.neusoft.bean; public class User { private int password; private String name; ...
- poj3617 best cow line(贪心题)
Best Cow Line Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32687 Accepted: 8660 De ...
- [转载]C语言头文件的作用
最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.学 习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是 ...
- Python虚拟机框架
Python字节码 我们知道,Python源代码在执行前,会先将源代码编译为字节码序列,Python虚拟机就根据这些字节码进行一系列的操作,从而完成对Python程序的执行.在Python2.5中,一 ...
- 关于windows服务的编写/安装/与调试
前注: 首先,这篇文章是从网上转过来的,因为最近有个项目,需要编写一个Windows Service来定时执行程序,网上很容易找到了这篇文章,大概看了一下,文章讲的还是很详细的.不过这篇文章应该是.n ...
- linux 基础 软件的安装 *****
一软件的安装 原代码与tarball 源代码---->编译------>可执行文件 查看文件类型 file命令 是否是二进制文件 注意如果文件的可执行权限 .c结尾的源文件- ...
- ip 核生成 rom 及questasim仿真时需要注意的问题
IP 核生成 ROM 步骤1:Tools --> MegaWizard Plug-In Manager 步骤2:Create a new custom megafuction variation ...