Written with StackEdit.

Description

到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~

经过一番抉择,两人决定将\(T\)国作为他们的目的地。\(T\)国的国土可以用一个凸\(N\)边形来表示,\(N\)个顶点表示\(N\)个入境/出境口。T国包含\(N-2\)个城市,每个城市都是顶点均为\(N\)边形顶点的三角形(换而言之,城市组成了关于\(T\)国的一个三角剖分)。两人的旅游路线可以看做是连接\(N\)个顶点中不相邻两点的线段。

为了能够买到最好的纪念品,小白希望旅游路线上经过的城市尽量多。作为小蓝的好友,你能帮帮小蓝吗?

Input

每个输入文件中仅包含一个测试数据。

第一行包含两个由空格隔开的正整数\(N\),\(N\)的含义如题目所述。

接下来有\(N-2\)行,每行包含三个整数\(p,q,r\),表示该城市三角形的三个顶点的编号(\(T\)国的\(N\)个顶点按顺时间方向从\(1\)至\(N\)编号)。

Output

输出文件共包含\(1\)行,表示最多经过的城市数目。(一个城市被当做经过当且仅当其与线路有至少两个公共点)

Sample Input

6

1 2 4

2 3 4

1 4 5

1 5 6

Sample Output

4

HINT

\(4<=N<=200000\)

Solution

  • 将每个三角形看成一个点.相邻的两个三角形之间连边.
  • 注意到三角剖分中,一定需要剖\(N-3\)次,每剖一次,图中多出一条边,这条边只能连接一对三角形.(节点).
  • 那么这个图共有\(N-2\)个点,\(N-3\)条边,且是连通的.
  • 那么所求的答案即为树的直径.
#include<bits/stdc++.h>
using namespace std;
typedef long long LoveLive;
typedef pair<int,int> pii;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
{
fh=-1;
jp=getchar();
}
while (jp>='0'&&jp<='9')
{
out=out*10+jp-'0';
jp=getchar();
}
return out*fh;
}
const int MAXN=2e5+10;
map<pii,int> s;
map<pii,int>::iterator it;
int n;
int cnt=0,head[MAXN];
int nx[MAXN<<1],to[MAXN<<1];
inline void add(int u,int v)
{
++cnt;
to[cnt]=v;
nx[cnt]=head[u];
head[u]=cnt;
}
inline void ins(int u,int v)
{
add(u,v);
add(v,u);
}
int dep[MAXN],q[4];
void opr(int a,int b,int i)
{
it=s.find(make_pair(q[a],q[b]));
if(it!=s.end())
ins(it->second,i),s.erase(it);
else
s[make_pair(q[a],q[b])]=i;
}
void dfs(int u,int fa)
{
for(int i=head[u];i;i=nx[i])
{
int v=to[i];
if(v==fa)
continue;
dep[v]=dep[u]+1;
dfs(v,u);
}
}
int getd()
{
int res=-1,rt;
dep[1]=1;
dfs(1,0);
for(int i=1;i<=n-2;++i)
if(dep[i]>res)
res=dep[i],rt=i;
dep[rt]=1;
dfs(rt,0);
for(int i=1;i<=n;++i)
res=max(res,dep[i]);
return res;
}
int main()
{
n=read();
for(int i=1;i<=n-2;++i)
{
q[1]=read();
q[2]=read();
q[3]=read();
sort(q+1,q+4);
opr(1,2,i);
opr(1,3,i);
opr(2,3,i);
}
int ans=getd();
printf("%d\n",ans);
return 0;
}

bzoj 2657 旅游的更多相关文章

  1. [bzoj] 2657 ZJOI2012 旅游 || bfs

    原题 题意: 一个多边形,三角剖分,求一条对角线最多能经过多少三角形 题解: 因为不涉及坐标之类的,所以根几何肯定一点关系都没有. 我们会发现,对于有共边的两个三角形,可以被同一条线穿过,而这就相当于 ...

  2. BZOJ 2157: 旅游( 树链剖分 )

    树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...

  3. bzoj 2157: 旅游 (LCT 边权)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 题面; 2157: 旅游 Time Limit: 10 Sec  Memory Lim ...

  4. 【刷题】BZOJ 2157 旅游

    Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间 ...

  5. BZOJ 2157: 旅游

    2157: 旅游 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1347  Solved: 619[Submit][Status][Discuss] ...

  6. BZOJ P2157 旅游

    题目大意: 维护一棵树,每条边有边权,支持下列操作:1.修改某条边的边权2.将某条路经上的边权取反3.询问某条路经上的和4.询问某条路经上的最大值5.询问某条路经上的最小值 --by BZOJ; ht ...

  7. bzoj [POI2007]旅游景点atr 状态压缩+Dij

    [POI2007]旅游景点atr Time Limit: 30 Sec  Memory Limit: 357 MBSubmit: 2258  Solved: 595[Submit][Status][D ...

  8. BZOJ 2157: 旅游 (2017.7.21 6:30-2017.7.21 15:38 今日第一题。。)

    Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1754  Solved: 765 Description Ray 乐忠于旅游,这次他来到了T 城.T ...

  9. BZOJ 3999 旅游

    .......好长啊. #include<iostream> #include<cstdio> #include<cstring> #include<algo ...

随机推荐

  1. GIT使用—一些概念

    (1)Git版本库(repository) 一个简单的数据库,包括所有用来维护与管理项目的修订版本和历史的信息. Git维护两个主要的数据结构: 对象库(object store)-在复制操作时能进行 ...

  2. MySQL-5.7 存储过程及函数

    1.语法 CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characte ...

  3. some words

    For we meet in an hour of change and challenge,              in a dacade of hope and fear,   in an a ...

  4. JAVA基础补漏--ArrayList

    今天在写代码的时候,index定义的时候用了Integer,在list.remove(index)的时候,总是不成功,后来发现如果用Integer定义的时候,index不再是基础数据类型,被识别为re ...

  5. springmvc跨域

    //mvc默认是text/plain;charset=ISO-8859-1@RequestMapping(value = "/xxx", produces = "appl ...

  6. Sudoku Solver, 求数独

    问题描述:填充数独表中空元素.空元素为'.' 算法分析:没填充一个数,都要看这个数所在的行,列,小矩阵是否合法.然后还要看整个数独表是否正确,而判断整个数独表只能通过递归,因为前一个结果的判断要依赖后 ...

  7. win7 vmware虚拟机上网设置

    1.上网方式设成HOST-ONLY 2.将主机的网络共享VMnet1(完成第一步设置后,VMware自动分配虚拟网络VMnet1) 3.win7下查看VMnet1网络ip 4.根据3查看的IP地址在v ...

  8. server_2003_r2_standard_sp2_vl_X13-46532

    1. 安装的是 cn_win_srv_2003_r2_standard_with_sp2_vl_cd1_X13-46532.iso CD2 它没有要求装 也就没装,貌似 网上搜到 安装CD2需要另外的 ...

  9. libnetwork 源码浅析

    [编者的话]从docker 1.6开始关注docker网络这块,从原来的铁板一块,到后来的libnetwork拆分,到现在的remote driver,docker 一直在改进.功能缺失,实用性不足, ...

  10. bower 安装

    安装Yeomannpm install --global yo搭建一个web应用脚手架,你将需要安装generator-webapp生成器:npm install -g generator-webap ...