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. vue eslint报错解决办法

    若提示入下图时,在build / webpack.base.conf.js中, 找到 // const createLintingRule = () => ({// test: /\.(js|v ...

  2. mfc 进程的优先级

    知识点:  进程优先级  获取当前进程句柄  优先级设置  优先级变动  优先级获取 一.进程优先级(优先级等级) 简单的说就是进程(线程)的优先级越高,那么就可以分占相对多的CPU时间片. ...

  3. cocos2d-x学习记录3——CCTouch触摸响应

    游戏不同于影音,强交互性是其一大特色,在游戏中主要体现为接受用户的输入并响应.智能手机触摸是其重要的输入方式. 在cocos2d-x中,触摸分为单点触摸和多点触摸. 单点触摸:主要继承CCTarget ...

  4. python编码你需要知道的编码风格

    此时你已经可以写一些更长更复杂的 Python 程序,是时候讨论一下 编码风格 了.大多数语言可以写(或者更明白的说, 格式化 )作几种不同的风格.有些比其它的更好读.让你的代码对别人更易读是个好想法 ...

  5. Asp.Net_<asp:RadioButtonList

       <asp:RadioButtonList runat="server" ID="RadioButtonList1"  RepeatDirection ...

  6. 散列(Hash)表入门

    一.概述 以 Key-Value 的形式进行数据存取的映射(map)结构 简单理解:用最基本的向量(数组)作为底层物理存储结构,通过适当的散列函数在词条的关键码与向量单元的秩(下标)之间建立映射关系 ...

  7. N的阶乘:高精度

    N的阶乘 题目描述  输入一个正整数N,输出N的阶乘. 输入描述: 正整数N(0<=N<=1000) 输出描述:  输入可能包括多组数据,对于每一组输入数据,输出N的阶乘 示例1 输入 4 ...

  8. Beta阶段事后分析

    1. 设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们在Beta阶段任务主要分为两部分,一类是对原功能的扩展,一类是新的博文功能.我们通过规 ...

  9. PAT甲题题解-1103. Integer Factorization (30)-(dfs)

    该题还不错~. 题意:给定N.K.P,使得可以分解成N = n1^P + … nk^P的形式,如果可以,输出sum(ni)最大的划分,如果sum一样,输出序列较大的那个.否则输出Impossible. ...

  10. HDU 6081 度度熊的王国战略(全局最小割Stoer-Wagner算法)

    Problem Description 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更 ...