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. 【Flask】WTForms文件上传下载

    # 文件上传笔记:1. 在模版中,form表单中,需要指定`encotype='multipart/form-data'`才能上传文件.2. 在后台如果想要获取上传的文件,那么应该使用`request ...

  2. Tomcat Connector 参数优化说明

    默认参数 注: Connector 通常在%HOME_TOMCAT%/conf/servser.xml 文件内 # 正常参数 <Connector port=" protocol=&q ...

  3. shell编程学习笔记--整数自增

    在Shell脚本中,用于while或for循环中经常要涉及到整数自增的情况,下面罗列下可能的方式 [方式一]declare -i来声明整数变量 root@localhost:~# declare -i ...

  4. Linux下同时复制多个文件

    方法一 使用cp命令 cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/ 需要注意的是这几个文件之间不要有空格 具有共同 ...

  5. Java Collections Framework Java集合框架概览

    Java SE documents -- The Collections Framework http://docs.oracle.com/javase/8/docs/technotes/guides ...

  6. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体

    1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...

  7. HTTP Status 500 - java.lang.NoClassDefFoundError: JspTagException

    HTTP Status 500 - java.lang.NoClassDefFoundError: JspTagException cause  java.lang.NoClassDefFoundEr ...

  8. Delphi_时间间隔

    1. var dtOnlineDateTime, dt: TDateTime; begin dt := StrToDateTime('2017/6/28 16:41:30'); dtOnlineDat ...

  9. Spring scope解惑

    在2.0之前只有两种singleton和prototype(网上说的,没去验证),后面增加了session.request.global session三种专门用于web应用程序上下文的Bean Si ...

  10. OnTouch关于performClick的Warning

    OnTouch关于performClick的Warning 当你对一个控件(例如FloatingActionButton)使用setOnTouchListener() 或者是对你的自定义控件重写onT ...