水能流过的地方,光就能穿过。
逝者如流水,光阴如梭
所以光线可以不用管,就是前面和后面联通就行,把所有相连的图形连inf的边,每个点拆成两个点,中间连1,最小割即为花费。
(这个计算几何良心)
AC Code:
#include<bits/stdc++.h>
#define maxn 705
#define maxm maxn * maxn * 4
#define eps 1e-7
#define inf 1e8
using namespace std;
int x,y,n;
int typ[maxn],x1[maxn],y3[maxn],x2[maxn],y2[maxn],r[maxn];
double sqr(int a){
return 1.0*a*a; }
double dist(int a,int b,int c,int d){
return sqrt(sqr(a-c)+sqr(b-d)); }
bool check1(int a,int b)
{
return sqrt(sqr(x1[a]-x1[b])+sqr(y3[a]-y3[b]))<=r[a]+r[b]+eps;
}
bool check2(int a,int b)
{
if(x1[a]>=x1[b] && x1[a]<=x2[b] && y3[a]>=y3[b] && y3[a]<=y2[b]) return 1;
if((y3[b]<=y3[a]&&y3[a]<=y2[b] && min(abs(x1[a]-x1[b]),abs(x1[a]-x2[b]))<=