题目 传送门:QWQ 分析 在任意两个不相邻的点连一条线,求这条线能穿过几个三角形. 建图比较讲究(详见代码) 求树的直径. 代码 #include <bits/stdc++.h> using namespace std; ; 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,di…
[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出境口.T国包含N-2个城市,每个城市都是顶点均为N边形顶点的三角形(换而言之,[b]城市组成了关于T国的一个三角剖分[/b]).[b]两人的旅游路线可以看做是连接N个顶点中不相邻两点的线段[/b]. 为了能够买到最好的纪念品,小白希望旅游路线上经过的城市尽量多.作为小蓝的好…
原题 题意: 一个多边形,三角剖分,求一条对角线最多能经过多少三角形 题解: 因为不涉及坐标之类的,所以根几何肯定一点关系都没有. 我们会发现,对于有共边的两个三角形,可以被同一条线穿过,而这就相当于这两个三角形之间有边.然后因为是多边形的三角剖分,所以最后只会有n-1条边.这样我们得到的就是一棵树了! 然后呢,因为我们要求的是任意一条对角线经过最多的城市个数,显然,这就是要求树上最长的一条路径,也就是树的直径了! 至于O(log)连边 ,考虑用pair将边和所属编号记录在map里,查询时连边即…
Code: // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<algorithm> #include<map> #include<vector> #include<string> #include<cmath> using namespace std; void setIO(string a){ freopen((a+".…
题目 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出境口.T国包含N-2个城市,每个城市都是顶点均为N边形顶点的三角形(换而言之,城市组成了关于T国的一个三角剖分).两人的旅游路线可以看做是连接N个顶点中不相邻两点的线段. 为了能够买到最好的纪念品,小白希望旅游路线上经过的城市尽量多.作为小蓝的好友,你能帮帮小蓝吗? 输入格式 每个输入文件中仅包含一个测…
Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个国家最兴旺的行业是消防业.由于政府对国民的热情忍无可忍(大量的消防经费开销)可是却又无可奈何(总统竞选的国民支持率),所以只能想尽方法提高消防能力. 现在这个国家的经费足以在一条边长度和不超过s的路径(两端都是城市)上建立消防枢纽,为了尽量提高枢纽的利用率,要求其他所有城市到这条路径的距离的最大值最小. 你受…
求树的直径 真是太神辣 #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> using namespace std; template<typename Q> Q &read(Q &x) { static char c, f; ; c = getchar(), !isdigit(c); )…
题目链接 如果k==1, 显然就是直径. k==2的时候, 把直径的边权变为-1, 然后在求一次直径. 变为-1是因为如果在走一次这条边, 答案会增加1. 学到了新的求直径的方法... #include <bits/stdc++.h> using namespace std; #define pb(x) push_back(x) #define ll long long #define mk(x, y) make_pair(x, y) #define lson l, m, rt<<…
题意:从树上任找三点u,v,w.使得dis(u,v)+min(dis(u,w),dis(v,w))最大. 有一个结论u,v必是树上直径的两端点. 剩下的枚举w就行了. 具体不会证... # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <vector> # include <queue> # include…
题意:一个三角划分的凸多边形 画一条对角线 穿过最多的三角形 题解:把每一个三角形看作一个点 如果某条边是两个三角形的公共边 那么就把这两个三角形连边 然后问题就转化为求树上的最长链了 就当求个直径就完了 #include <stdio.h> #include <algorithm> #include <iostream> using namespace std; struct node { int x, y, id; }E[]; bool cmp(node A, no…