【BZOJ 2458 最小三角形】】的更多相关文章

BZOJ 2458 最小三角形 题面 一个平面上有很多点,求他们中的点组成的周长最小的三角形的周长. 题解 跟平面最近点对差不多,也是先把区间内的点按x坐标从中间分开,递归处理,然后再处理横跨中线的三角形. 如何缩小范围?设左右两个子区间发现的最小周长是d,则与中线距离超过d / 2都没有用了,对于一个点,所有与它距离超过d / 2的点也都没有用. #include <cstdio> #include <cstring> #include <cmath> #includ…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1551  Solved: 549[Submit][Status][Discuss] Description Xaviera现在遇到了一个有趣的问题.平面上有N个点,Xaviera想找出周长最小的三角形.由于点非常多,分布也非常乱,所以Xaviera想请你来解决这个问题.为了减小问题的难度,这里的三角形也包括共线的三点. Input 第一行包含一个整数N表示点的个数.接下来N行每行有两个整数,表示这个…
[前言]话说好久没有写题解了.到暑假了反而忙.o(╯□╰)o [原题] 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 574  Solved: 177 [id=2458" style="color:blue; text-decoration:none">Submit][Status] Description Xaviera如今遇到了一个有趣的问题. 平面上有N个点.Xa…
题目链接: 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1101  Solved: 380 Description Xaviera现在遇到了一个有趣的问题.平面上有N个点,Xaviera想找出周长最小的三角形.由于点非常多,分布也非常乱,所以Xaviera想请你来解决这个问题.为了减小问题的难度,这里的三角形也包括共线的三点. Input 第一行包含一个整数N表示点的个数.接下来N行每行有两个整…
http://www.lydsy.com/JudgeOnline/problem.php?id=2458 Description Xaviera现在遇到了一个有趣的问题. 平面上有N个点,Xaviera想找出周长最小的三角形. 由于点非常多,分布也非常乱,所以Xaviera想请你来解决这个问题. 为了减小问题的难度,这里的三角形也包括共线的三点. Input 第一行包含一个整数N表示点的个数. 接下来N行每行有两个整数,表示这个点的坐标. Output 输出只有一行,包含一个6位小数,为周长最短…
http://www.lydsy.com/JudgeOnline/problem.php?id=2458 [BeiJing2011]最小三角形 描述 Frisk现在遇到了一个有趣的问题. 平面上有N个点,Frisk想找出周长最小的三角形. 由于点非常多,分布也非常乱,所以Frisk想请你来解决这个问题. 为了减小问题的难度,这里的三角形也包括共线的三点. 输入 第一行包含一个整数N表示点的个数. 接下来N行每行有两个整数,表示这个点的坐标. 输出 输出只有一行,包含一个6位小数,为周长最短的三角…
题目链接:bzoj2458: [BeiJing2011]最小三角形 学习推荐博客:分治法编程问题之最接近点对问题的算法分析 题解:先将所有点按x值排列,然后每次将当前区间[l,r]分成左右两半递归求解周长最小三角形.考虑到两半区间之间可能有连成最小三角形的情况,设dd为两半区间中最小三角形周长的最小值,筛选满足要求的点(x值与中点坐标x值的距离小于dd),然后按y值排序,进而暴搜出周长最小三角形. #include<cstdio> #include<cmath> #include&…
题面:BJWC2011 最小三角形 \(solution:\) 昨天才学完平面最近点对,今天就要求平面最近的三个点,显然不是巧合. 仔细一思考,我们用来求平面最近点对的方法不就可以用到三个点上吗? 就是按x轴排序,然后不断二分,在向上回溯的同时更新我们的ans,比如当前这个区间,距离中点水平距离超过ans/2的点必然不会更新答案!而且通过与最近点对同理的证明,我们在中间那个水平宽为ans的区间内,竖直距离小于ans/2的点绝对很少(至少我们能接受!),所以我们可以看代码了! \(code:\)…
类似于平面最近点对,考虑分治,即分别计算分割线两侧的最小三角形再考虑跨过线的三角形. 复杂度证明也是类似的,对于某一个点,在另一侧可能与其构成最小三角形的点在一个d*d/2的矩形内(两边之和大于第三边),并且这些点所组成的三角形周长均不小于d.然而并不清楚这里至多会有多少个点,vfk曾说上界是16,我当然不会证明这个上界也构造不出来有这么多点的方案.找这些点的时候归并就可以做到线性.那么复杂度是O(nlogn)乘上枚举这些点的常数2*16*15/2,看起来根本跑不动不过这个上界肯定是特别松的所以…
题目大意:给出平面上n个点,求最小的由这些点组成的三角形的周长.(N<=200,000) 思路:点按x坐标排序后分治,每次取出与排在中间的点的横坐标相差不超当前答案一半的点,按y坐标排序后再暴力枚举y坐标相差不超过当前答案一半的三个点统计答案,复杂度O(能过)(听说期望nlogn). #include<cstdio> #include<cmath> #include<algorithm> using namespace std; inline int read()…
题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 2#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define N 200010 #define INF 1e20 using namespace std; int…
分治就是了. 类似于分治找最近/远点对. CODE #include <bits/stdc++.h> using namespace std; const double eps = 1e-13; const int MAXN = 200005; const double INF = 1e15; #define sqr(x) ((x)*(x)) struct Point { double x, y; Point(){} Point(double x, double y):x(x), y(y){}…
传送门 题意:给出$N$个点,求其中周长最小的三角形(共线的也计算在内).$N \leq 2 \times 10^5$ 这道题唤起了我对平面最近点对的依稀记忆 考虑平面最近点对的分治,将分界线两边的求解改为求三角形的最小边长即可. 小心坐标乘积爆int 不难但就是想不出 //This code is written by Itst #include<bits/stdc++.h> #define int long long #define ld long double #define eps (…
给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 Hint 数据范围 1<=m,n<=1000 不难得到一个思路.最终的答案 = 任选3点的方案数 - 三点共线的方案数. 前者很好求直接组合数就好了.后者可以枚举线段两端点,然后计算第三个点在这个线…
Description Xaviera现在遇到了一个有趣的问题.平面上有N个点,Xaviera想找出周长最小的三角形.由于点非常多,分布也非常乱,所以Xaviera想请你来解决这个问题.为了减小问题的难度,这里的三角形也包括共线的三点. Input 第一行包含一个整数N表示点的个数.接下来N行每行有两个整数,表示这个点的坐标. Output 输出只有一行,包含一个6位小数,为周长最短的三角形的周长(四舍五入). 首先旋转坐标系防止被卡. 将点排序,分割为左右/上下两部分,对每个子问题分别排序,直…
求平面上n个点组成的周长最小的三角形. 回忆平面最近点对的做法,找到横坐标的中点mid分治到两边,合并时考虑离mid横坐标不超过当前最小值d的所有点,按y排序后暴力更新答案. 这个题也一样,先分治到两边,然后取出所有离mid横坐标不超过当前最小值/2的点,按y排序后选择三个总坐标不超过当前最小值/2的点更新答案. 按y排序在递归上来时归并,复杂度O(nlogn). #include<cmath> #include<cstdio> #include<cstring> #i…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3251 题意: 给你一棵树,n个节点,每个点的权值为w[i]. 接下来有m个形如(p,a,b)的操作: (1)p == 0: 问你在从a到b的路径上,有没有三个点满足:它们的权值大小可以构成三角形. 如果有,输出'Y',否则输出'N'. (2)p == 1: 将点a的权值w[a]改为b. 题解: 首先考虑一个结论: 因为构成三角形的充要条件是:对于三个数a < b < c,满足a + b…
什么时候ZJ省选再现一次这么良心的题吧... 题意: 在一个染色的格子画分割线,使其不想连,求最少的线段 SOL: 裸裸的最小割.题目要求两种颜色不想连,我们把他分到两个集合,也就是把所有相连的边切断-----这不就是最小割嘛. 把其中一个颜色与源相连,另一个颜色与汇相连,容量为正无穷,然后中间相连的容量均为1,然后跑下dinic即可. Code: /*========================================================================…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1797 题意:给出一个有向图,每条边有流量,给出源点汇点s.t.对于每条边,询问:(1)是否存在一个最小割包含该边?(2)是否所有的最小割都包含该边? 思路:首先求最大流,在残余网络中求强连通 分量.对于每条原图中的边(最大流中添加的反向边不算)<u,v>,该边的残余流量为0且u和v在两个不同的强连通分量中,则存在一个最小割 包含该边:在上述满足且u与s在一个连通分量.v与t在一个连通…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2229 题意:给定一个带权无向图.若干询问,每个询问回答有多少点对(s,t)满足s和t的最小割小于等于x. 思路:对于两个点(s,t)的最小割.这个最小割将将所有点分成左右两个集合X.Y.对于X中任意一点a与Y中任意一点b,(a,b)的最小割小于等于(s,t)的最小割.因此,每次递归计算分成的两个集合的最小割,更新答案. struct node { int v,cap,next; };…
我们可以对于消费和盈利的点建立二分图,开始答案为所有的盈利和, 那么源向消费的点连边,流量为消费值,盈利向汇连边,流量为盈利值 中间盈利对应的消费连边,流量为INF,那么我们求这张图的最小割,用 开始的答案减去最小割就是答案,因为最小割的存在不是左面就是右面, 割左面,代表建这条路,需要对应的消费,那么割右面代表不要这项盈利, 那本来加进去的盈利应该减掉,所以可以这样更新答案. /**********************************************************…
1845: [Cqoi2005] 三角形面积并 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 848  Solved: 206[Submit][Status][Discuss] Description 给出n个三角形,求它们并的面积. Input 第一行为n(N < = 100), 即三角形的个数 以下n行,每行6个整数x1, y1, x2, y2, x3, y3,代表三角形的顶点坐标.坐标均为不超过10 ^ 6的实数,输入数据保留1位小数 Outp…
1845: [Cqoi2005] 三角形面积并 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 1151  Solved: 313[Submit][Status][Discuss] Description 给出n个三角形,求它们并的面积. Input 第一行为n(N < = 100), 即三角形的个数 以下n行,每行6个整数x1, y1, x2, y2, x3, y3,代表三角形的顶点坐标.坐标均为不超过10 ^ 6的实数,输入数据保留1位小数 Out…
2176: Strange string Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 419  Solved: 174[Submit][Status][Discuss] Description 给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的SS的字串中最小的(字符串的比较), 则称T为”奇怪的字串”. 你的任务就是找出这个字符串. Input 读入两行, 第一行为n, 第二…
嘟嘟嘟 这一看就是平面分治的题,所以就想办法往这上面去靠. 关键就是到\(mid\)点的限制距离是什么.就是对于当前区间,所有小于这个距离的点都选出来,参与更新最优解. 假设从左右区间中得到的最优解是\(d\),那么这个限制距离就是\(\frac{d}{2}\).这很显然,如果三角形的一条边比\(\frac{d}{2}\)还大,那么他的周长一定大于\(d\). 因此我们选出所有小于\(\frac{d}{2}\)的点,然后比较暴力的更新答案,具体看代码. #include<cstdio> #in…
最小路径覆盖问题是:给定一个DAG,该DAG的一个路径覆盖是一个路径的集合,使得每个点属于且仅属于其中一条路径,问题就是求一个大小最小的路径集合. 做法是将每个点A拆成两个点A1,A2,如果A->B,那么连A1->B2求一个最大匹配. 一个结论是:最小路径数 = 点数 - 最大匹配 证明的大概思路是: 一个路径覆盖与一个边独立集(即一个匹配)一一对应. 一个路径覆盖的路径数 = 点数 - 匹配数 ( 因为 路径数+每条路径的边数和-1 = n个点的无向联通无环图的边数 , 匹配数等于每条路径的…
收获: 1.流量为0的边可以不加入. 2.最小割方案要与决策方案对应. #include <cstdio> #include <cmath> #include <cstring> #include <vector> #define min(a,b) ((a)<(b)?(a):(b)) #define oo 0x3f3f3f3f #define N 610 using namespace std; typedef long long dnt; struc…
公式推出来后想了半天没思路,居然A是01矩阵..... 如果一个问题是求最值,并那么尝试先将所有可能收益加起来,然后矛盾部分能否用最小割表达(本题有两个矛盾,第一个是选还是不选,第二个是i,j有一个不选,就不能获得bij的收益). #include <cstdio> #include <cstring> #include <vector> #define N 510 #define S N+N*N #define E S*10 #define oo 0x3f3f3f3f…
Description 小C现在正要攻打科学馆腹地------计算机第三机房.而信息组的同学们已经建好了一座座堡垒,准备迎战.小C作为一种高度智慧的可怕生物,早已对同学们的信息了如指掌. 攻打每一个人的堡垒需要一个代价,而且必须攻打若干次才能把镇守之人灭得灰飞烟灭. 当小C在绞尽脑汁想攻打方案时,突然从XXX的堡垒中滚出来一个纸条:一个惊人的秘密被小C发现了:原来各个堡垒之间会相互提供援助,但是当一个堡垒被攻打时,他对所援助的堡垒的援助就会停止,因为他自己已经自身难保了.也就是说,小C只要攻打某…
比较显然的最小割的题,增加节点source,sink,对于所有选1的人我们可以(source,i,1),选0的人我们可以(i,sink,1),然后对于好朋友我们可以连接(i,j,1)(j,i,1),然后我们求最小割就好了,因为我们可以将节点分为两部分,表示0,1的选法,那么我们割一条与sink,source连的边表示这个人与自己的意愿不同,需要1的代价,如果两个人连边,这两个人不在同一集合,那么这两个人割掉连边需要1的代价. /**********************************…