bzoj 3124: [Sdoi2013]直径
- #include<cstdio>
- #include<iostream>
- #define M 400009
- #define ll long long
- using namespace std;
- ll d[M],v[M],ans1;
- int n,cnt=,head[M],next[M],u[M],mx,f[M],q[M],ans,mx1,fro[M],from[M],sum[M];
- void jia(int a1,int a2,int a3)
- {
- cnt++;
- from[cnt]=a1;
- next[cnt]=head[a1];
- head[a1]=cnt;
- u[cnt]=a2;
- v[cnt]=(ll)(a3)*(ll)(n);
- return;
- }
- void bfs(int a1)
- {
- d[a1]=;
- int h=,t=;
- q[]=a1;
- f[a1]=;
- fro[a1]=;
- sum[a1]=;
- for(;h<t;)
- {
- int p=q[++h];
- for(int i=head[p];i;i=next[i])
- if(!f[u[i]])
- {
- f[u[i]]=;
- q[++t]=u[i];
- d[u[i]]=d[p]+v[i];
- fro[u[i]]=i;
- sum[u[i]]=sum[p]+;
- }
- }
- return;
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<n;i++)
- {
- int a1,a2,a3;
- scanf("%d%d%d",&a1,&a2,&a3);
- jia(a1,a2,a3);
- jia(a2,a1,a3);
- }
- bfs();
- ll max1=;
- for(int i=;i<=n;i++)
- {
- if(max1<d[i])
- {
- max1=d[i];
- mx1=i;
- }
- f[i]=;
- }
- bfs(mx1);
- max1=;
- for(int i=;i<=n;i++)
- {
- if(max1<d[i])
- {
- max1=d[i];
- ans=i;
- }
- f[i]=;
- }
- ans1=d[ans];
- printf("%lld\n",d[ans]/n);
- for(;ans;)
- {
- int p=fro[ans];
- v[p]--;
- v[p^]--;
- ans=from[p];
- }
- bfs();
- max1=;
- for(int i=;i<=n;i++)
- {
- if(max1<d[i])
- {
- max1=d[i];
- mx1=i;
- }
- f[i]=;
- }
- bfs(mx1);
- max1=;
- for(int i=;i<=n;i++)
- if(max1<d[i])
- {
- max1=d[i];
- ans=i;
- }
- printf("%lld\n",ans1-d[ans]);
- return ;
- }
先找一条直径,把直径上的边的权值减去1,再找一遍直径,差便是答案。
bzoj 3124: [Sdoi2013]直径的更多相关文章
- Bzoj 3124: [Sdoi2013]直径 题解
3124: [Sdoi2013]直径 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1222 Solved: 580[Submit][Status] ...
- bzoj 3124 [Sdoi2013]直径(dfs)
Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节点,可以证明其有且仅有N-1 条边. 路径:一 ...
- 3124: [Sdoi2013]直径
3124: [Sdoi2013]直径 https://www.lydsy.com/JudgeOnline/problem.php?id=3124 分析: 所有直径都经过的边,一定都是连续的一段.(画个 ...
- bzoj千题计划134:bzoj3124: [Sdoi2013]直径
http://www.lydsy.com/JudgeOnline/problem.php?id=3124 第一问: dfs1.dfs2 dfs2中记录dis[i]表示点i距离最长链左端点的距离 第二问 ...
- bzoj3124: [Sdoi2013]直径 树形dp two points
题目链接 bzoj3124: [Sdoi2013]直径 题解 发现所有直径都经过的边 一定在一条直径上,并且是连续的 在一条直径上找这段区间的两个就好了 代码 #include<map> ...
- [洛谷P3304] [SDOI2013]直径
洛谷题目链接:[SDOI2013]直径 题目描述 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节点,可以证明其有且仅 ...
- 【BZOJ3124】[Sdoi2013]直径 树形DP(不用结论)
[BZOJ3124][Sdoi2013]直径 Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节 ...
- BZOJ_3124_[Sdoi2013]直径_树形DP
BZOJ_3124_[Sdoi2013]直径_树形DP Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵 ...
- bzoj 3124 直径
Written with StackEdit. Description 小\(Q\)最近学习了一些图论知识.根据课本,有如下定义. 树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一 ...
随机推荐
- Normalize.css 与 reset.css
Normalize.css 与 reset.css都是初始化页面样式 不同点在于 reset.css更加粗暴,直接把所有的样式全部初始化了: Normalize.css还剩点良心,还保留了一些浏览器默 ...
- 介绍kali下的一些小工具
1.macchanger 可以用来修改你的mac地址
- nodejs框架express准备登录
目录: 安装模板 静态资源 添加视图 渲染视图 url重定向 模板引擎 从本节课程开始我们要使用express框架实现一个简单的用户登陆功能,让我们先准备一下相关资源. 在nodejs中使用expre ...
- An internal error occurred during: "Building workspace".
当在eclipse中的web工程中增加了extjs4,出现An internal error occurred during: "Building workspace". Java ...
- 关于学习Knockoutjs--入门(二)
这两天终于闲一丢丢了,可以有多点时间学习一下拉.接下来要写到的还是Knockoutjs. Knockout是建立在以下3个核心功能之上的: 1. 属性监控与依赖跟踪 2. 声明式绑定 3. 模版机制 ...
- win api 实现 AES加密、解密
WCHAR szPasswod[] = {L"goodpasswod" }; HCRYPTHASH hHash; HCRYPTPROV hCryptProv; HCRYPTKEY ...
- 点击checkbox,触发事件
时间选择: 起始时间:<input type="text" value="2016-03-21 12:24:10" id="starttime& ...
- IBM DB2 For Linux安装指南(转)
一.安装前准备工作: 1.对于Linux系统,需要安装以下软件包: 2.Linux内核设置: 编辑/etc/sysctl.conf文件,加入如下内容: 3.创建相应用户以及组: 官方文档给出必须创建三 ...
- 20145227&20145201 《信息安全系统设计基础》实验二 固件开发
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: ...
- 查看oracle被锁的表
SELECT /*+ rule*/ a.sid, b.owner, object_name, object_type FROM v$lock a, all_objects b WHERE TYPE = ...