旅游 bzoj-2657 Zjoi-2012

题目大意题目链接

注释:$1\le K\le 2\cdot 10^5$。


想法:这题...

感觉和上一个题的提示有些类似,就是题目生怕你不知道这是一道对偶图的题... ...

我们先把它转成对偶图。然后我们只把分割n变形的线段两侧的点之间连边,这样就是一棵树。

紧接着我们想要遍历最多的城市,其实就是找树上直径。树形dp即可。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200010
using namespace std;
int to[N<<1],nxt[N<<1],head[N],joa;
int tot[(N<<1)+N],f[N][2],cnt;
struct Node
{
int x,y,p;
}edge[(N<<1)+N];
inline bool cmp(const Node &x,const Node &y)
{
return x.x==y.x?x.y<y.y:x.x<y.x;
}
inline void add(int x,int y)
{
to[++joa]=y;
nxt[joa]=head[x];
head[x]=joa;
}
int ans=0;
void dfs(int pos,int fa)
{
for(int i=head[pos];i;i=nxt[i])
{
if(to[i]==fa) continue;
dfs(to[i],pos);
if(f[pos][0]<f[to[i]][0]+1) f[pos][1]=f[pos][0],f[pos][0]=f[to[i]][0]+1;
else f[pos][1]=max(f[pos][1],f[to[i]][0]+1);
}
ans=max(ans,f[pos][0]+f[pos][1]);
}
int main()
{
int n; cin >> n ;
for(int i=1;i<n-1;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
edge[++cnt].x=min(x,y),edge[cnt].y=max(x,y); edge[cnt].p=i;
edge[++cnt].x=min(x,z),edge[cnt].y=max(x,z); edge[cnt].p=i;
edge[++cnt].x=min(y,z),edge[cnt].y=max(y,z); edge[cnt].p=i;
}
sort(edge+1,edge+cnt+1,cmp);
for(int i=1;i<=cnt;i++)
{
// printf("%d %d %d\n",edge[i].x,edge[i].y,edge[i].p);
if(i==1||abs(edge[i].x-edge[i].y)==1||(edge[i].x==1&&edge[i].y==n)) continue;
if(edge[i].x==edge[i-1].x&&edge[i].y==edge[i-1].y)
{
// printf("Fuck %d %d\n",edge[i-1].p,edge[i].p);
add(edge[i].p,edge[i-1].p);
add(edge[i-1].p,edge[i].p);
}
}
dfs(1,1);
// for(int i=1;i<=n-2;i++)
// {
// printf("%d %d\n",f[i][0],f[i][1]);
// }
printf("%d\n",ans+1);
return 0;
}

小结:裙子课件什么题都有qwq/hy

[bzoj2657][Zjoi2012]旅游 journey_ 对偶图_树形dp的更多相关文章

  1. BZOJ_1864_[Zjoi2006]三色二叉树_树形DP

    BZOJ_1864_[Zjoi2006]三色二叉树_树形DP 题意: 分析:递归建树,然后DP,从子节点转移. 注意到红色和蓝色没有区别,因为我们可以将红蓝互换而方案是相同的.这样的话我们只需要知道当 ...

  2. BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash

    BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash 题意: 给你一棵树每个点有一个权值,要求修改最少的权值,使得每个节点的权值等于其儿子的权值和且儿子的权值都相等. 分析: 首先我们 ...

  3. B20J_4027_[HEOI2015]兔子与樱花_树形DP

    B20J_4027_[HEOI2015]兔子与樱花_树形DP 题意: 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编 ...

  4. BZOJ_1040_[ZJOI2008]骑士_树形DP

    BZOJ_1040_[ZJOI2008]骑士_树形DP 题意: Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各 界的赞扬.最近发生了一件可怕的事情,邪 ...

  5. BZOJ_1060_时态同步_树形DP

    BZOJ_1060_时态同步_树形DP 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1060 分析:水水的树形DP. 用儿子的最大值更新父亲, ...

  6. BZOJ_1827_[Usaco2010 Mar]gather 奶牛大集会_树形DP

    BZOJ_1827_[Usaco2010 Mar]gather 奶牛大集会_树形DP 题意:Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来 ...

  7. BZOJ_4726_[POI2017]Sabota?_树形DP

    BZOJ_4726_[POI2017]Sabota?_树形DP Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属 ...

  8. BZOJ_1304_[CQOI2009]叶子的染色_树形DP

    BZOJ_1304_[CQOI2009]叶子的染色_树形DP Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白 ...

  9. BZOJ_4033_[HAOI2015]树上染色_树形DP

    BZOJ_4033_[HAOI2015]树上染色_树形DP Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的 ...

随机推荐

  1. ASP.NET 知识点总结(七)

    1.new修饰符是起什么作用new 修饰符用于声明类或类的成员,表示隐藏了基类中同名的成员.而new 操作符用于实例化一个类型new 修饰符只能用于继承类,一般用于弥补基类设计的不足new 修饰符和 ...

  2. 309 Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期

    Say you have an array for which the ith element is the price of a given stock on day i.Design an alg ...

  3. jQuery学习笔记(5)-事件与事件对象

    一.前言 主要讲解事件的绑定与触发 二.jQuery中添加事件 1.使用bind()方法绑定事件 <input id="btn" type="button" ...

  4. 如何手工搭建本地Yum仓库

    如何手工搭建本地Yum仓库(重点推荐)  https://www.linuxidc.com/Linux/2016-09/135480.htm CentOS7.2 创建本地YUM源和局域网YUM源: h ...

  5. 在C语言中模仿java的LinkedList集合的使用(不要错过哦)

    在C语言中,多个数据的储存通常会用到数组.但是C语言的数组有个缺陷,就是固定长度,超过数组的最大长度就会溢出.怎样实现N个数储存起来而不被溢出呢. 学过java的都知道,java.util包里有一个L ...

  6. python做一个数独小游戏

    最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...

  7. Python之Pandas中Series、DataFrame实践

    Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...

  8. dom4j使用方法详解

    本文先做知识点的简单介绍,最后附完整案例. 一.解析XML文件 public class Foo { //url为XML文档地址 //自己封装了一个工具类 返回解析完成的document public ...

  9. break和continue在多重循环中使用

    break和continue在多重循环中使用 关于break和continue在java中,break的作用是跳出循环,continue的作用是跳出本次循环. 我们一般情况下,这样使用: public ...

  10. (转)vim编辑器操作命令大全-绝对全

    周六了,熟悉熟悉vim 命令 学习链接: vim命令大全 http://blog.csdn.net/scaleqiao/article/details/45153379 vim命令小技巧 http:/ ...