problem

写的什么jb题意!这个语文水平。。。。

洛谷的一堆题解看下来也没懂他们懂得题目大意,真是给我蚌埠住了

luogu评测链接

一句话题意:给定一个三角剖分,求任意两顶点穿过的最多三角形个数(只经过某三角形顶点则不算穿过该三角形)

solution

一般三角剖分就先往转化成树的方向思考。—— Quack\text{Quack}Quack。

一条线穿过的三角形,相邻两个肯定是有邻边的。

我们把三角形(即城市)看成一个点,与其有邻边的城市之间就连一条边。

那么会发现这个穿的路线就是在这个树上跑一条链。

最大化个数就是最长化链长,那要求的就是这个树的直径。

所以这道题的难点在于你读懂题目了吗?

这个连边后一定是个树,不会出现环。

n−2n-2n−2 个三角形,只需要 n−3n-3n−3 条边就可以剖分出来。

且这个三角剖分的三个点都是顶点,相当于是生成图上的一条边,n−2n-2n−2 个城市点,n−3n-3n−3 条边。

生成环意味着有一堆三角形围住了一个城市点,这显然不可能。

code

#include <bits/stdc++.h>
using namespace std;
#define maxn 200005
map < pair < int, int >, int > mp;
vector < int > G[maxn];
int n, ans;
int dp[maxn];void dfs( int u, int fa ) {dp[u] = 1;for( int v : G[u] ) {if( v == fa ) continue;else dfs( v, u );ans = max( ans, dp[u] + dp[v] );dp[u] = max( dp[u], dp[v] + 1 );}
}int main() {scanf( "%d", &n );int x[5];for( int i = 1;i <= n - 2;i ++ ) {for( int j = 1;j <= 3;j ++ ) scanf( "%d", &x[j] );sort( x + 1, x + 4 );for( int j = 1;j <= 3;j ++ )for( int k = j + 1;k <= 3;k ++ )if( ! mp[make_pair( x[j], x[k] )] )mp[make_pair( x[j], x[k] )] = i;else {G[i].push_back( mp[make_pair( x[j], x[k] )] );G[mp[make_pair( x[j], x[k] )]].push_back( i );}}dfs( 1, 0 );printf( "%d\n", ans );return 0;
}

[TJOI2012] 旅游(树的直径)相关推荐

  1. 算法提高——树上DP(树的直径)

    文章目录 前言 一.什么是树的直径? 二.例题 三.树上DP 总结 前言 树的直径是图论里边非常高的考察点并且是入门树形dp的基础,竞赛的同学务必重视. 一.什么是树的直径? 树上最远两点(叶子结点) ...

  2. [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询

    题意: 给你一棵带权树,q次查询,每次给出两个区间,[l1,r1][l2,r2][l_1,r_1] [l_2,r_2][l1​,r1​][l2​,r2​]从这两个区间中分别选择两个数字,使得这两个点的 ...

  3. 小A与欧拉路(牛客-树的直径)

    题解: 欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次 问你走完这树上所有的点最短路径是什么. 因为树是没有环的,所以你走到叶子结点的时候需要往回走,也就是再走一 ...

  4. luogu P4408 [NOI2003]逃学的小孩(树的直径)

    整理的算法模板合集: ACM模板 看了半天的题原来没有告诉你三个点的坐标,不然直接跑最短路即可.要求最长的时间,所以我们要自己找到三个点,而在树中最长的路径也就是树的直径.那么本题就可以简化为:在一棵 ...

  5. 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

    整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...

  6. 【树的直径】解题报告: luogu P3629 [APIO2010]巡逻(树的直径,位运算成对变换,思维)

    题目链接:P3629 [APIO2010]巡逻 首先看题,从1号结点开始,全部遍历并回到1号结点会恰好经过所有的边两次,这样总长度为 2∗(n−1)2*(n-1)2∗(n−1). 那么如果建立一条路以 ...

  7. 0x63.图论 - 树的直径与最近公共祖先

    目录 一.树的直径(Diameter) 1.树形DP求树的直径 2.两次BFS/DFS求树的直径 1.POJ 1985.Cow Marathon(DFS求树的直径模板题) 2.AcWing 350. ...

  8. [Bzoj2282]消防(二分答案+树的直径)

    Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个国家 ...

  9. 树的直径【p3629】[APIO2010]巡逻

    Description 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到达其 他任一 ...

最新文章

  1. 科大星云诗社动态20210501
  2. python类定义中__init__(),在__init__中定义一个成员以在python中的类体中定义它的区别?...
  3. [Axis2与Eclipse整合开发Web Service系列之一] 生成Web Service Client(将WSDl 转化成 Java代码)
  4. django 创建项目
  5. 依赖混淆 exploit 已被滥用于攻击亚马逊等多家大厂
  6. H - Color the ball(树状数组)(区间更新)(求单点)(线段树)
  7. 基于Windows Azure 搭建基于SharePoint 2010 Intranet、Extranet、Internet (2): 创建并发布SharePoint Intranet站点...
  8. fortran95查询字符串出现次数子程序
  9. 信令传送协议-SCTP协议解析
  10. NFC技术——1、初始NFC
  11. PHP编写简单的注册登录页面
  12. 正当防卫指导性案例以及研析
  13. mixpanel umeng talkingdata
  14. 在自己网页浏览器端通过websocket接入海康摄像头实时视频-方案二
  15. xbox会员中心在哪_白金会会员中心
  16. golang 数组组合成最小的整数_整数数组拼成一个最小或最大的数
  17. Ubuntu系统耳机没声音
  18. TCP三次握手四次挥手(三国版)
  19. 如何下载网页中的图片
  20. 数据库介绍与数据库安装

热门文章

  1. 数学特级教师:数学除了做题目,我还必须让他们看这些!
  2. 机器学习资料第3版,助你继续成长!
  3. 我是怎么进入Oracle这样的大企业的?
  4. 如何轻松将上亿的数据玩弄于股掌之中?
  5. Spark运行原理剖析
  6. python基金会主席入门教程_Python基金会-文件IO操作,python,基础
  7. linux6.5进入救援模式,rhel6.5救援模式修复系统
  8. 楼层效果_1一28高楼最好最吉利的楼层是哪层?选楼层要注意什么?
  9. 筛选装置用c语言编程,一种空壳瓜子筛选装置的制作方法
  10. android编译的错误日志,Android Studio:编译器错误输出窗口在哪里?