Evanyou Blog 彩带

P2610 [ZJOI2012]旅游

题目描述

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

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

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

输入输出格式

输入格式:

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

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

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

输出格式:

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

输入输出样例

输入样例#1: 
  1. 6
  2. 1 2 4
  3. 2 3 4
  4. 1 4 5
  5. 1 5 6
输出样例#1: 
  1. 4

说明

对于20%的数据, n<=2000

对于100%的数据, 4<=n<=200000

 

Solution:

  本题zyys。

  我们将能够互相走到的城市之间连边,就能将原题抽象成一棵树,那么最多能走多少个城市就是直径+1了,至于建图直接用map水一下就好了。

代码:

复制代码
  1. /*Code by 520 -- 8.21*/
  2. #include<bits/stdc++.h>
  3. #define il inline
  4. #define ll long long
  5. #define RE register
  6. #define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
  7. #define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
  8. using namespace std;
  9. typedef pair<int,int> P;
  10. map<P,int> mp;
  11. const int N=400005;
  12. int n,f[N],ans;
  13. int to[N],net[N],h[N],cnt;
  14. bool vis[N];
  15. int gi(){
  16. int a=0;char x=getchar();
  17. while(x<'0'||x>'9')x=getchar();
  18. while(x>='0'&&x<='9')a=(a<<3)+(a<<1)+(x^48),x=getchar();
  19. return a;
  20. }
  21. il void add(int u,int v){to[++cnt]=v,net[cnt]=h[u],h[u]=cnt;}
  22. void dp(int u){
  23. vis[u]=1;
  24. for(RE int i=h[u];i;i=net[i])
  25. if(!vis[to[i]])
  26. dp(to[i]),ans=max(ans,f[u]+f[to[i]]+1),f[u]=max(f[u],f[to[i]]+1);
  27. }
  28. il void init(){
  29. n=gi()-2;
  30. int a[3],tp;
  31. For(i,1,n) {
  32. a[0]=gi(),a[1]=gi(),a[2]=gi();
  33. sort(a,a+3);
  34. tp=mp[P(a[0],a[1])];
  35. if(tp) add(i,tp),add(tp,i);
  36. else mp[P(a[0],a[1])]=i;
  37. tp=mp[P(a[0],a[2])];
  38. if(tp) add(i,tp),add(tp,i);
  39. else mp[P(a[0],a[2])]=i;
  40. tp=mp[P(a[1],a[2])];
  41. if(tp) add(i,tp),add(tp,i);
  42. else mp[P(a[1],a[2])]=i;
  43. }
  44. dp(1);
  45. cout<<ans+1;
  46. }
  47. int main(){
  48. init();
  49. return 0;
  50. }
复制代码

 

posted @   five20  阅读(140)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!
Live2D
欢迎阅读『P2610 [ZJOI2012]旅游』
点击右上角即可分享
微信分享提示