题目

传送门:QWQ

分析

在任意两个不相邻的点连一条线,求这条线能穿过几个三角形。

建图比较讲究(详见代码)

求树的直径。

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=;
struct Node{
int x,y,id;
}E[maxn];
int cmp(Node a,Node b){ return a.x<b.x||(a.x==b.x&&a.y<b.y); }
struct Edge{
int u,v,dis;
};
vector<int> G[maxn];
int inq[maxn],d[maxn],n;
void Add(int u,int v){
G[u].push_back(v); G[v].push_back(u);
}
queue<int> que;
int spfa(int s){
memset(d,-,sizeof(d));
memset(inq,,sizeof(inq));
d[s]=;
que.push(s); inq[s]=;
while(!que.empty()){
int u=que.front(); que.pop();
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(d[v]<d[u]+){
d[v]=d[u]+;
if(!inq[v]){ que.push(v); inq[v]=; }
}
}
}
int ans=;
for(int i=;i<=n;i++) ans=max(ans,d[i]);
return ans;
}
inline int in(){
int x = , f = ; char ch = getchar();
while (ch < '' || ch > ''){if (ch == '-')f = -;ch = getchar();}
while (ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x * f;
}
int main(){
scanf("%d",&n);
int a,b,c,cnt=;
for(int i=;i<n-;i++){
a=in();b=in();c=in();
if(a>b) swap(a,b); if(b>c) swap(b,c); if(a>b) swap(a,b);
E[++cnt].x=a;E[cnt].y=b;E[cnt].id=i;
E[++cnt].x=a;E[cnt].y=c;E[cnt].id=i;
E[++cnt].x=b;E[cnt].y=c;E[cnt].id=i;
}
sort(E+,E++cnt,cmp);
for(int i=;i<=cnt;i++){
if(E[i].x==E[i-].x&&E[i].y==E[i-].y){
Add(E[i].id,E[i-].id);
}
}
int ans=,num;
spfa();
for(int i=;i<=n;i++){
if(ans<d[i]){ ans=d[i]; num=i; }
}
printf("%d\n",spfa(num));
return ;
}

【BZOJ】2657: [Zjoi2012]旅游(journey)(树的直径)的更多相关文章

  1. [ZJOI2012]旅游(树的直径)

    [ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示 ...

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

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

  3. [ZJOI2012]旅游 对偶图 树的直径

    Code: // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<algorith ...

  4. BZOJ2657 [Zjoi2012]旅游(journey) 【树的直径】

    题目 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出境口 ...

  5. bzoj 2282 [Sdoi2011]消防(树的直径,二分)

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

  6. bzoj2657: [Zjoi2012]旅游(journey)

    求树的直径 真是太神辣 #include<cstdio> #include<cstring> #include<cstdlib> #include<algor ...

  7. bzoj 1912 : [Apio2010]patrol 巡逻 树的直径

    题目链接 如果k==1, 显然就是直径. k==2的时候, 把直径的边权变为-1, 然后在求一次直径. 变为-1是因为如果在走一次这条边, 答案会增加1. 学到了新的求直径的方法... #includ ...

  8. BZOJ 1509 逃学的小孩(树的直径)

    题意:从树上任找三点u,v,w.使得dis(u,v)+min(dis(u,w),dis(v,w))最大. 有一个结论u,v必是树上直径的两端点. 剩下的枚举w就行了. 具体不会证... # inclu ...

  9. BZOJ2657: [Zjoi2012]旅游(journey) (树形DP)

    题意:一个三角划分的凸多边形 画一条对角线 穿过最多的三角形 题解:把每一个三角形看作一个点 如果某条边是两个三角形的公共边 那么就把这两个三角形连边 然后问题就转化为求树上的最长链了 就当求个直径就 ...

随机推荐

  1. Google内部培训过1.8万人的机器学习速成课

    什么是(监督)机器学习?简而言之,它是以下几点: ML系统学习如何组合输入以产生对从未见过的数据的有用预测. 我们来探讨基本的机器学习术语. 标签 一个标签是我们预测物品的属性,比如变量y在简单线性回 ...

  2. erl_0017 《硝烟中的erlang》 读书笔记004 “锁和阻塞”

    如果某个进程需要持续地接收新任务,那么其在执行耗时过长的锁或者阻塞操作时,就会出现问题. 最为常见的例子之一就是:某个进程使用了TCP socket,阻塞在了接收新的连接或者等待消息上面.在执行此类阻 ...

  3. Java并发--并发容器之CopyOnWriteArrayList

    原文链接:http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容, ...

  4. BZOJ3489 A simple rmq problem 【可持久化树套树】*

    BZOJ3489 A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一 ...

  5. 在 ubuntu 中安装 python3.5 tornado pymysql

    一.在 ubuntu 中安装 python3.5 1.首先,在系统中是自带python2.7的.不要卸载,因为一些系统的东西是需要这个的.python2.7和python3.5是可以共存的. 命令如下 ...

  6. nginx fastcgi 优化

    fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; fastcgi ...

  7. ORACLE 12C RMAN 功能增强

    在ORACLE 12C中对rman的功能有了不少增强,在以前的文章中写过RMAN RECOVER TABLE功能,这里另外补充rman增强的两个小功能(sql语句和数据文件分割)数据库版本 SQL&g ...

  8. IIS7、IIS7.5中应用程序池最优配置方案

    https://www.cnblogs.com/xinaixia/p/5945678.html 找到Web站点对应的应用程序池,“应用程序池” → 找到对应的“应用程序池” → 右键“高级设置...” ...

  9. 队列模拟题——pat1026. Table Tennis

    题意自己理解了,主要是两个队列维护,一个VIP队列,一个普通队列 搜集了一些坑(有些坑转自别的网站用于广大同学的测试之用) 普通人也有VIP的权益!!! 屌丝逆袭有木有!!! 920:52:00 10 ...

  10. printf()_scanf()_取余运算符与取模运算符

    基本的输入和输出函数的用法 printf();四种用法 1.printf("字符串\n"); 2.printf("输出控制符",输出参数); 3.printf( ...