题目

  某公司加工一种由铁、铝、锡组成的合金。他们的工作很简单。首先进口一些铁铝锡合金原材料,不同种类的
原材料中铁铝锡的比重不同。然后,将每种原材料取出一定量,经过融解、混合,得到新的合金。新的合金的铁铝
锡比重为用户所需要的比重。 现在,用户给出了n种他们需要的合金,以及每种合金中铁铝锡的比重。公司希望能
够订购最少种类的原材料,并且使用这些原材料可以加工出用户需要的所有种类的合金。

输入格式

  第一行两个整数m和n(m, n ≤ 500),分别表示原材料种数和用户需要的合金种数。第2到m + 1行,每行三
个实数a, b, c(a, b, c ≥ 0 且 a + b + c = 1),分别表示铁铝锡在一种原材料中所占的比重。第m + 2到m +
n + 1行,每行三个实数a, b, c(a, b, c ≥ 0 且 a + b + c = 1),分别表示铁铝锡在一种用户需要的合金中
所占的比重。

输出格式

 一个整数,表示最少需要的原材料种数。若无解,则输出–1。

输入样例

10 10

0.1 0.2 0.7

0.2 0.3 0.5

0.3 0.4 0.3

0.4 0.5 0.1

0.5 0.1 0.4

0.6 0.2 0.2

0.7 0.3 0

0.8 0.1 0.1

0.9 0.1 0

1 0 0

0.1 0.2 0.7

0.2 0.3 0.5

0.3 0.4 0.3

0.4 0.5 0.1

0.5 0.1 0.4

0.6 0.2 0.2

0.7 0.3 0

0.8 0.1 0.1

0.9 0.1 0

1 0 0

输出样例

5

题解

神题,蒟蒻跪了QAQ
首先第三个点是赘余的,只要两个点满足条件,第三个点一定满足条件,因为它们的和为都为同一个定值

这样我们就可以把材料和产品看做平面中的点,一个产品能被一些材料制作出来,当且仅当该产品在这些材料的凸包中。

问题就变成了使用A集合中的点形成的最小凸包围住B集合中的所有点

如果对A中的点i和j有所有B中的点都在其左侧,则连边i->j
求一个最小环即可。
此时B中的点一定在环上所有边左侧,即在该凸包内

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u]; k != -1; k = ed[k].nxt)
#define eps 1e-9
using namespace std;
const int maxn = 505,maxm = 100005,INF = 1000000000;
struct Point{double x,y;}A[maxn],B[maxn];
int N,M,G[maxn][maxn],ans = INF;
double cross(const Point& a,const Point& b){return a.x * b.y - a.y * b.x;}
double dot(const Point& a,const Point& b){return a.x * b.x + a.y * b.y;}
Point line(const Point& a,const Point& b){return (Point){b.x - a.x,b.y - a.y};}
void floyd(){REP(k,N)REP(i,N)REP(j,N)G[i][j] = min(G[i][j],G[i][k] + G[k][j]);REP(i,N) ans = min(ans,G[i][i]);
}
int main(){fill(G[0],G[0] + maxn * maxn,INF);scanf("%d%d",&N,&M); double t,tt;REP(i,N) scanf("%lf%lf%lf",&A[i].x,&A[i].y,&t);REP(i,M) scanf("%lf%lf%lf",&B[i].x,&B[i].y,&t);for (int i = 1; i <= N; i++)for (int j = 1,k; j <= N; j++){for (k = 1; k <= M; k++){t = cross(line(A[i],B[k]),line(A[j],B[k]));tt = dot(line(A[i],B[k]),line(A[j],B[k]));if (t > eps) break;if (fabs(t) < eps && tt > eps) break;}if (k == M + 1) G[i][j] = 1;}floyd();printf("%d\n",ans == INF ? -1 : ans);return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8282715.html

BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】相关推荐

  1. bzoj 1027: [JSOI2007]合金(floyd最小环)

    1027: [JSOI2007]合金 Time Limit: 4 Sec  Memory Limit: 162 MB Submit: 4136  Solved: 1209 [Submit][Statu ...

  2. [bzoj1027][JSOI2007]合金

    来自FallDream的博客,未经允许,请勿转载,谢谢. 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料 ...

  3. Bzoj1027 [JSOI2007]合金

    Time Limit: 4 Sec  Memory Limit: 162 MB Submit: 3823  Solved: 1115 Description 某公司加工一种由铁.铝.锡组成的合金.他们 ...

  4. BZOJ-1027 [JSOI2007]合金

    首先,我们可以舍弃掉第三维,那样的话每种金属就是平面上的点了. 对于任意两个点x,y,假如用户点都不在右边,则从x至y连条长度为1的有向边. 然后Flody求个最小环. #include <cs ...

  5. [JSOI2007]合金

    题目描述 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金 ...

  6. URAL 1750 Pakhom and the Gully 计算几何+floyd

    题目链接:点击打开链接 gg.. . #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cs ...

  7. 2019.3.summary

    emmmm,把以前写的2b总结丢上来吧,不过应该也不会有人看QAQ (注:因为用txt写的,有一些公式打的很随意,放到markdown上公式自动排版,有可能会显示出错误!可在下方留言) 2019.2. ...

  8. java file 相对路径 根目录修改_java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)...

    https://blog.csdn.net/my__sun_/article/details/74450241 读取文件的写法,相对路径 在当前的目录结构中读取test.txt的有四种写法 简单粗暴的 ...

  9. 清北学堂学习笔记 第一期

    Day 1 1.贪心的奇怪方法:调整法 调整法,顾名思义,就是用别的方式进行题目的分析以及证明,例如说luogu的最大乘积.这种题目的主要分析思路为:先考虑一些简单的情况,通过简单的情况来推出一些有用 ...

最新文章

  1. Foundation 框架 归档
  2. mybatis对mapper.xml的解析(三)
  3. html文件怎么改为php,请问你们怎么将html的文件的内容改变为php
  4. [react] React怎样跳过重新渲染?
  5. WinCE下监视设备插拔的参考代码
  6. 三星Galaxy Note 10+真机照公布:居中开孔前摄实锤
  7. Spring mvc 转发
  8. 7种JS脚本分页代码 showPages v1.0
  9. CAXA 数控车编程视频教程 CAXA车床绘图教程
  10. 华为交换机常见STP/RSTP操作
  11. Python之判断闰年
  12. Linux内核同步原语之原子操作(Atomic)
  13. Pointer Network指针网络
  14. 初中计算机ps教程,初中信息技术《Photoshop 初探——基本操作》教学设计
  15. PySpark处理数据并图表分析
  16. 目前数据分析师都有哪些国际认证
  17. php 将信息写入文件格式,PHP 将信息写入文件
  18. 转炉炼钢计算机仿真实验报告,计算机仿真、实验报告.docx
  19. 重庆印象-大礼堂广场
  20. SAP SD:VL10A上清不掉的尾巴

热门文章

  1. 最好浏览器_Windows最好的浏览器!只有你想不到,没有它做不到
  2. php iis user,IIS+PHP环境的./路径问题
  3. 计算机组成原理中计算机主要包括哪几部分,计算机组成原理本科生期末试卷(五)部分答案详解...
  4. python url文件名_Python –从URL下载文件
  5. mongodb插入数据_MongoDB插入
  6. css 悬停动画_CSS3缩放图像动画效果悬停
  7. Python – numpy.arange()
  8. Akka创建第一个Actor《nine》译
  9. 在Windows Server 2008 R2上安装Ftp服务
  10. 深入了解C++与C语言的区别