bzoj 2657 旅游
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 旅游的更多相关文章
- [bzoj] 2657 ZJOI2012 旅游 || bfs
		
原题 题意: 一个多边形,三角剖分,求一条对角线最多能经过多少三角形 题解: 因为不涉及坐标之类的,所以根几何肯定一点关系都没有. 我们会发现,对于有共边的两个三角形,可以被同一条线穿过,而这就相当于 ...
 - BZOJ 2157: 旅游( 树链剖分 )
		
树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...
 - bzoj 2157: 旅游 (LCT 边权)
		
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 题面; 2157: 旅游 Time Limit: 10 Sec Memory Lim ...
 - 【刷题】BZOJ 2157 旅游
		
Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间 ...
 - BZOJ 2157: 旅游
		
2157: 旅游 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1347 Solved: 619[Submit][Status][Discuss] ...
 - BZOJ P2157 旅游
		
题目大意: 维护一棵树,每条边有边权,支持下列操作:1.修改某条边的边权2.将某条路经上的边权取反3.询问某条路经上的和4.询问某条路经上的最大值5.询问某条路经上的最小值 --by BZOJ; ht ...
 - bzoj [POI2007]旅游景点atr 状态压缩+Dij
		
[POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 2258 Solved: 595[Submit][Status][D ...
 - 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 ...
 - BZOJ 3999 旅游
		
.......好长啊. #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
 
随机推荐
- Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?'
			
Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?' 一.原因 因为Python版本问题,MySQLdb ...
 - 平衡搜索树--红黑树 RBTree
			
红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black. 通过对任何一条从根到叶子节点简单路径上的颜色来约束树的高度,红黑树保证最长路径不超过最短路径的两倍, ...
 - 20145109 《Java实验报告1》
			
Experiment Ⅰ --getting familiar with JDK (Linux + Eclipse) Content 1.Compile and run easy Java progr ...
 - invalid derived query的解决办法
			
标签: eclipse / invalid / derived / 解决办法 / 校验功能 479 在Eclipse的运行过程中,突然有一个接口跳出如下错误: invalid derived quer ...
 - Routing and Action Selection in ASP.NET Web API
			
https://exceptionnotfound.net/using-http-methods-correctly-in-asp-net-web-api/ The algorithm ASP.NET ...
 - dll隐式链接延迟加载
			
dll隐式链接延迟加载 程序隐式链接dll后,启动程序将自动加载dll,查找路径依次是: 1:当前文件路径: 2:使用SetDLLDirectory设置的路径: 3:系统路径,system32文件夹, ...
 - srm开发(基于ssh)(3)
			
联系人管理 (1)客户和联系人一对多配置(重点) (2)新增联系人 -新增功能实现 -Struts2实现文件上传 (3)联系人列表 -no session问题 (4)客户和联系人级联删除 联系人管理模 ...
 - 20165332实验二 Java面向对象程序设计
			
20165332实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 ...
 - Codeforces Round #451 (Div. 2)
			
水题场.... 结果因为D题看错题意,B题手贱写残了...现场只出了A,C,E A:水题.. #include<bits/stdc++.h> #define fi first #defin ...
 - C#外部类、内部类(嵌套类)之间的成员访问特点
			
最近程序中需要用到多线程工作下的单例模式.而其多种实现方法中,利用内部类实现懒汉模式是一种值得推荐的方式.顺便也就对内部类和外部类之间的关系做了一下研究,总结如下(理解不困难,不粘贴代码了,有需要的留 ...