这题真tm是醉了。
就是对于每个亲戚,利用其它的亲戚对他半平面交求出其控制的范围,然后随便跑个最短路就行了
n=0卡了我一下午//
1 #include2 #include 3 #include 4 #include 5 #include 6 #define N 666 7 #define eps 1e-12 8 using namespace std; 9 int g[N][N]; 10 struct point{ 11 double x[2]; 12 point(){} 13 point(double a,double b){x[0]=a,x[1]=b;} 14 double & operator [] (int a){ return x[a];} 15 }p[N]; 16 double dis(point a,point b){ 17 return sqrt((b[0]-a[0])*(b[0]-a[0])+(b[1]-a[1])*(b[1]-a[1])); 18 } 19 struct line{ 20 double a,b,c,k; 21 int id; 22 line(){} 23 line (double x,double y,double z,int pos){ 24 a=x;b=y;c=z; 25 k=atan2(-x,y);id=pos; 26 } 27 void rev(){ 28 a=-a;b=-b;c=-c; 29 k=atan2(-a,b); 30 } 31 }l[N],q[N]; 32 int T,n,bot,tot,top,be,ans; 33 double wx,wy,sx,sy,d; 34 bool cmp(line a,line b){ 35 if(fabs(a.k-b.k) =eps)l[++j]=l[i]; 58 tot=j; 59 bot=1;top=2; 60 q[1]=l[1];q[2]=l[2]; 61 for(i=3;i<=tot;i++){ 62 while(bot