http://uoj.ac/problem/126 (题目链接)

题意

  求基环树直径。

Solution

  zz选手迟早退役,唉,右转题解→_→:LCF

细节

  拓扑排序的时候度数为0时入队。我在想什么w(゚Д゚)w

代码

// uoj126
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf (1ll<<30)
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)
using namespace std; const int maxn=100010;
LL f[maxn][2],W[2][maxn],mx[2][maxn],suf[maxn],pre[maxn],deep[maxn];
LL ans,E;
int cnt,m,n,dag[maxn],head[maxn],vis[maxn],a[maxn];
struct edge {int to,next,w;}e[maxn<<1]; void link(int u,int v,int w) {
e[++cnt]=(edge){v,head[u],w};head[u]=cnt;
e[++cnt]=(edge){u,head[v],w};head[v]=cnt;
}
void topsort() {
queue<int> q;
for (int i=1;i<=n;i++) if (dag[i]==1) q.push(i);
while (!q.empty()) {
int x=q.front();q.pop();dag[x]--;
for (int i=head[x];i;i=e[i].next)
if (dag[e[i].to]) if (--dag[e[i].to]==1) q.push(e[i].to);
}
}
void dfs(int x,int fa) {
for (int i=head[x];i;i=e[i].next) if (!dag[e[i].to] && e[i].to!=fa) {
deep[e[i].to]=deep[x]+e[i].w;
dfs(e[i].to,x);
if (f[x][0]<f[e[i].to][0]+e[i].w) f[x][1]=f[x][0],f[x][0]=f[e[i].to][0]+e[i].w;
else if (f[x][1]<f[e[i].to][0]+e[i].w) f[x][1]=f[e[i].to][0]+e[i].w;
}
ans=max(ans,f[x][0]+f[x][1]);
}
void dp(int x) {
vis[x]=1;
int t=++m;a[m]=x;
for (int i=head[x];i;i=e[i].next) if (dag[e[i].to] && !vis[e[i].to]) {
W[0][m+1]=W[0][m]+e[i].w;
dp(e[i].to);
W[1][t]=W[1][t+1]+e[i].w;
}
for (int i=head[x];i;i=e[i].next) if (dag[e[i].to]) E+=e[i].w;
}
void circle() {
LL tmp;
pre[1]=tmp=mx[0][1]=f[a[1]][0]+W[0][1];
for (int i=2;i<=m;i++) {
pre[i]=max(pre[i-1],tmp+f[a[i]][0]+W[0][i]);
mx[0][i]=max(mx[0][i-1],f[a[i]][0]+W[0][i]);
tmp=max(tmp,f[a[i]][0]-W[0][i]);
}
suf[m]=tmp=mx[1][m]=f[a[m]][0]+W[1][m];
for (int i=m-1;i;i--) {
suf[i]=max(suf[i+1],tmp+f[a[i]][0]+W[1][i]);
mx[1][i]=max(mx[1][i+1],f[a[i]][0]+W[1][i]);
tmp=max(tmp,f[a[i]][0]-W[1][i]);
}
LL d=pre[m];E=E/2-W[0][m];
for (int i=1;i<m;i++)
d=min(d,max(E+mx[0][i]+mx[1][i+1],max(pre[i],suf[i+1])));
ans=max(ans,d);
}
int main() {
scanf("%d",&n);
for (int u,v,w,i=1;i<=n;i++) {
scanf("%d%d%d",&u,&v,&w);
link(u,v,w);dag[u]++,dag[v]++;
}
topsort();
for (int i=1;i<=n;i++) if (dag[i]) dfs(i,0);
for (int i=1;i<=n;i++) if (dag[i]) {dp(i);break;}
circle();
printf("%.1lf",ans/2.0);
return 0;
}

【uoj126】 NOI2013—快餐店的更多相关文章

  1. BZOJ3242/UOJ126 [Noi2013]快餐店

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  2. CF835F Roads in the Kingdom/UOJ126 NOI2013 快餐店 树的直径

    传送门--CF 传送门--UOJ 题目要求基环树删掉环上的一条边得到的树的直径的最小值. 如果直接考虑删哪条边最优似乎不太可做,于是考虑另一种想法:枚举删掉的边并快速地求出当前的直径. 对于环上的点, ...

  3. bzoj 3242: [Noi2013]快餐店 章鱼图

    3242: [Noi2013]快餐店 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 266  Solved: 140[Submit][Status] ...

  4. P1399 [NOI2013] 快餐店 方法记录

    原题题面P1399 [NOI2013] 快餐店 题目描述 小 T 打算在城市 C 开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小 T 希望快餐店的地址选在离最 ...

  5. bzoj3242 [Noi2013]快餐店

    Description 小T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方. 快餐店的顾客分布在城 ...

  6. 3242: [Noi2013]快餐店 - BZOJ

    Description 小T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方. 快餐店的顾客分布在城 ...

  7. 动态规划:NOI2013 快餐店

    Description 小 T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近 的地方. 快餐店的顾客分布 ...

  8. NOI2013 快餐店

    http://uoj.ac/problem/126 总的来说,还是很容易想的,就是有点恶心. 首先,很明显只有一个环. 我们先找出这个环,给各棵树编号id[i],然后各棵树分别以环上的点为根,求出每个 ...

  9. bzoj 3242: [Noi2013]快餐店

    Description 小T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方. 快餐店的顾客分布在城 ...

随机推荐

  1. 百度谷歌雅虎三大搜索引擎比较和如何配置谷歌访问助手访问Google搜索服务

    引言: 由于近期网上盛传”百度搜索引擎已死“的消息,引发个人对于搜索引擎的思考.百度作为最大的中文搜索引擎,确实有着很大声誉,再加上本地化的优势,正成为国人们的首选,但是作为一名技术开发人员,使用搜索 ...

  2. MySQL优化:explain using temporary

    什么时候会使用临时表:group/order没设计好的时候 1.order没用索引 2.order用了索引, 但不是和where相同的索引 3.order用了两个索引, 但不是联合索引 4.order ...

  3. 几种flash存储芯片的用途和分类

    1.IIC EEPROM------容量小,采用的是IIC通信协议:用于在掉电时,存系统配置参数,比如屏幕亮度等.常用芯片型号有 AT24C02.FM24C02.CAT24C02等,其常见的封装多为D ...

  4. ElasticSearch查询 第二篇:文档更新

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  5. Android 模拟输入那点事

    因工作原因,需要用到模拟输入这个东东,查阅了一些资料,实现方式有多种,我大概分为两类,命令行类和程序类. 命令行类包括自动化测试组件monkeyrunner,getevent/setevent命令,i ...

  6. CSS 天坑 I - 字体单位

    首先,本文所讨论的“坑”是在做回应式网页设计( Responsive Web Design 以下简称 RWD)时显现的,如果你还只是在做传统的Web设计这算不上是一个坑,因为传统的Web页面是死的,不 ...

  7. LintCode——全排列

    描述:给定一个数字列表,返回其所有可能的排列. 样例:给出一个列表[1,2,3],其全排列为:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 说明: ...

  8. 火狐浏览器之伪造IP地址

    前言: 前段时间,测试过程中需要伪造来源IP地址,百思不得其解,因而发现火狐浏览器的这个Modify Headers插件,十分好用,推荐给大家. 步骤: 1.安装插件Modify Headers 进入 ...

  9. 第三次Scrum meeting

    第三次Scrum meeting 会议主要内容: 测试方面:确定测试的各个环节以及测试的相关要求,完成初步的功能测试.同时在测试时仔细记录相应错误信息,并进行备注. 沟通方面:同Dream团队(学霸前 ...

  10. 实训六(Cocos2dx游戏分享到微信朋友圈----AppID的获取)

    考虑把游戏分享到微信朋友圈,前面的博文已经写到,shareSDK是一个很好的选择,但是学习了几天时间,遇到了很多问题,与其在一棵树上吊死,还不如退一步海阔天空,先暂时放一放,于是我考虑了一下既然是分享 ...