亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

bzoj 1137: [POI2009]Wsp 島嶼 (半平面交)

2019-11-08 02:59:58
字體:
來源:轉載
供稿:網友

1137: [POI2009]Wsp 島嶼

Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 133  Solved: 65[Submit][Status][Discuss]

Description

Byteotia島嶼是一個凸多邊形。城市全都在海岸上。按順時針編號1到n。任意兩個城市之間都有一條筆直的道路相連。道路相交處可以自由穿行。有一些道路被游擊隊控制了,不能走,但是可以經過這條道路與未被控制的道路的交點。問從城市1到n的最短距離。

Input

第一行正整數n m表示城市數和被控制的島嶼數(3≤n≤10^5 1≤m≤10^6)接下來n行每行兩個整數x y表示每個城市的坐標。(|x|,|y|≤10^6)接下來m行描述一條不能走的道路(起點和終點)。數據保證有解。

Output

輸出一個實數,最短距離,誤差10^-5以內均算正確。

Sample Input

6 9-12 -10-11 6-4 126 1416 618 -23 41 52 62 34 53 51 33 61 6

Sample Output

42.000000000

HINT

Source

鳴謝 vfleaking

[Submit][Status][Discuss]

題解:半平面交

這道題一看數據范圍就知道一定不能用普通的最短路做。

所以我們考慮半平面交。最短的路徑應該就是所有可以通行的直線交出的凸包的周長,但是O(n(n-1)/2)做不了半平面交。其實可以發現與i相連的有用的直線就是i能到達的最遠的點與i的連線。

然后我們加入直線1->n,算答案的時候再減掉即可。

#include<iostream>  #include<cstring>  #include<cstdio>  #include<algorithm>  #include<cmath>  #define N 500003 #define eps 1e-8  #define inf 1000000000using namespace std;  int n,m,v[N],pos[N],head,tail,cnt;  struct data{      int x,y;  }e[N*4];  struct vector{      double x,y;      vector(double X=0,double Y=0) {          x=X,y=Y;      };  }a[N],p[N],poly[N]; vector Operator-(vector a,vector b){      return vector (a.x-b.x,a.y-b.y);  }  vector operator+(vector a,vector b){      return vector (a.x+b.x,a.y+b.y);  }  vector operator*(vector a,double val){      return vector (a.x*val,a.y*val);  }   struct line{	vector p,v;	double ang;	line() {		p=vector(); v=vector();	}	line(vector a,vector b){		p=a; v=b-a; ang=atan2(v.y,v.x);	}}l[N],q[N]; bool operator <(line a,line b){	return a.ang<b.ang;}int dcmp(double x){      if (fabs(x)<eps) return 0;      return x<0?-1:1;  }  double cross(vector a,vector b){      return a.x*b.y-a.y*b.x;  }  vector glt(line a,line b)  {      vector u=a.p-b.p;    double t=cross(b.v,u)/cross(a.v,b.v);      return a.p+a.v*t;  }  void init(){	p[1]=vector(-inf,-inf); p[2]=vector(inf,-inf); p[3]=vector(inf,inf); p[4]=vector(-inf,inf);	l[++m]=line(p[4],p[1]); 	l[++m]=line(p[3],p[4]);	l[++m]=line(p[2],p[3]);	l[++m]=line(p[1],p[2]);}bool Onleft(line a,vector w){	return cross(a.v,(w-a.p))>=-eps;}void halfpins(){	sort(l+1,l+m+1);	head=tail=1; q[1]=l[1];	for (int i=2;i<=m;i++) {		while (head<tail&&!Onleft(l[i],p[tail-1])) --tail;		while (head<tail&&!Onleft(l[i],p[head])) head++;		q[++tail]=l[i];		if (fabs(cross(q[tail].v,q[tail-1].v))<eps) {			--tail;			if (Onleft(q[tail],l[i].p)) q[tail]=l[i];		}		if (head<tail) 		 p[tail-1]=glt(q[tail-1],q[tail]); 	} 	while (head<tail&&!Onleft(q[head],p[tail-1])) --tail; 	if (tail-head<=1) return; 	p[tail]=glt(q[tail],q[head]); 	for (int i=head;i<=tail;i++) poly[++cnt]=p[i]; 	poly[cnt+1]=poly[1];}int cmp(data a,data b){      return a.x<b.x||a.x==b.x&&a.y>b.y;  }  double get_len(vector a)  {       return sqrt(a.x*a.x+a.y*a.y);  }  int main()  {      freopen("a.in","r",stdin);      //freopen("my.out","w",stdout);    scanf("%d%d",&n,&m);      for (int i=1;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);      for (int i=1;i<=m;i++) {       scanf("%d%d",&e[i].x,&e[i].y);       if (e[i].x>e[i].y) swap(e[i].x,e[i].y);      }      sort(e+1,e+m+1,cmp);        for (int i=1;i<=m;i++) pos[e[i].x]=max(pos[e[i].x],i);      for (int i=1;i<=n;i++) {          if (pos[i]<pos[i-1]) {              if (i!=n) v[i]=n;              continue;          }          if (e[pos[i-1]+1].y!=n) {              v[i]=n;              continue;          }          for(int j=pos[i-1]+1;j<=pos[i];j++)           if (e[j].y!=e[j+1].y+1||j+1>pos[i]) {              v[i]=e[j].y-1;              break;           }          if (v[i]<=i) v[i]=0;      }       if (v[1]==n) {    	PRintf("%.5lf/n",get_len(a[n]-a[1]));    	return 0;	}	m=0; init();    l[++m]=line(a[1],a[n]);    for (int i=1;i<=n;i++)       if (v[i]) l[++m]=line(a[v[i]],a[i]);    halfpins();    double ans=0;      for (int i=1;i<=cnt;i++) 	 ans+=get_len(poly[i%cnt+1]-poly[(i+1)%cnt+1]);    printf("%.5lf/n",ans-get_len(a[n]-a[1]));  }  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区视频免费| 国产在线精品自拍| 91国内精品久久| 日韩精品视频在线播放| 久久久久久久久久久成人| 亚洲国产精品嫩草影院久久| 久久中文字幕视频| 欧美激情videoshd| 久久理论片午夜琪琪电影网| 尤物九九久久国产精品的分类| 日韩电影免费观看在线| 午夜精品蜜臀一区二区三区免费| 成人97在线观看视频| 亚洲欧洲在线观看| 亚洲国产美女久久久久| 欧美成人激情在线| 国产精品日韩专区| 最近的2019中文字幕免费一页| 亚洲精品中文字幕女同| www.欧美视频| 国产精品影院在线观看| 欧美精品生活片| 日韩美女av在线免费观看| 7777精品视频| 欧美性xxxx在线播放| 国产亚洲精品久久久| 日韩av最新在线观看| 中文字幕亚洲欧美日韩在线不卡| 欧美视频国产精品| 日韩中文字幕视频在线| 亚洲三级 欧美三级| 欧美一区深夜视频| 日韩精品一区二区三区第95| 精品五月天久久| 国产精品美腿一区在线看| 91在线免费网站| 538国产精品一区二区在线| 成人网页在线免费观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美性猛交丰臀xxxxx网站| 成人福利网站在线观看| 国内伊人久久久久久网站视频| 国产精品久久久久久久美男| 欧美精品在线网站| 国产视频999| 久久久久久久97| 久久国产精彩视频| 福利微拍一区二区| 欧美视频国产精品| 久久久亚洲福利精品午夜| 1769国产精品| 国产精品国产三级国产aⅴ浪潮| 菠萝蜜影院一区二区免费| 81精品国产乱码久久久久久| 欧美国产视频一区二区| 日韩精品中文字幕在线| 日韩av电影在线播放| www高清在线视频日韩欧美| 精品亚洲一区二区| 91精品久久久久久| 午夜精品福利在线观看| 久久国产精品久久久久| 精品亚洲国产视频| 成人激情在线播放| 欧美精品激情在线| 日韩精品欧美国产精品忘忧草| 成人黄色片网站| 国产精品男人的天堂| 欧美乱人伦中文字幕在线| 亚洲影视九九影院在线观看| 久久精品视频导航| 久久精品亚洲一区| 日韩欧美在线视频观看| 亚洲已满18点击进入在线看片| 国内精品美女av在线播放| 第一福利永久视频精品| 亚洲网站在线看| 国产精品美女www爽爽爽视频| 国产精品久久久久久久久| 91精品久久久久| 精品国产一区二区三区久久久| 成人福利视频在线观看| 欧美久久久精品| 高清欧美电影在线| 国产精品九九久久久久久久| 色噜噜亚洲精品中文字幕| 国产精品入口福利| 久久久久久久国产| 亚洲天堂免费视频| 亚洲色图五月天| 黑人精品xxx一区| 日本亚洲欧洲色α| 懂色aⅴ精品一区二区三区蜜月| 国产欧美 在线欧美| 国产色视频一区| 久久亚洲一区二区三区四区五区高| 国产精品久久久久一区二区| 超碰精品一区二区三区乱码| 国产精品自产拍在线观| 欧美日韩国产精品一区二区不卡中文| 国产剧情久久久久久| 伊人男人综合视频网| 日韩电影在线观看中文字幕| 欧美日韩中文在线观看| 国产精品揄拍一区二区| 国产成人中文字幕| 国语自产精品视频在免费| 欧美电影免费播放| 国语自产精品视频在线看| 国产精品福利观看| 欧美激情喷水视频| 欧日韩不卡在线视频| 2020国产精品视频| 97国产一区二区精品久久呦| 久久免费视频在线| 欧美激情国产精品| 97在线视频免费| 精品中文字幕久久久久久| 久久综合网hezyo| 久久成人精品一区二区三区| 这里只有精品在线播放| 亚洲第一网站男人都懂| 深夜福利国产精品| 中文字幕在线看视频国产欧美| 久久99热精品| 亚洲欧美精品伊人久久| 国产成人精品综合久久久| 欧美性xxxxhd| 久久久免费精品| 日韩在线观看电影| 亚洲美女av网站| 上原亚衣av一区二区三区| 日本高清久久天堂| 国产z一区二区三区| 久久精品成人欧美大片古装| 538国产精品一区二区免费视频| 中文国产亚洲喷潮| 国产亚洲精品久久久| 国产性色av一区二区| 久久夜色精品国产欧美乱| 亚洲视频电影图片偷拍一区| 精品精品国产国产自在线| 日韩福利视频在线观看| 欧美一级片在线播放| 亚洲www在线观看| 欧美激情在线一区| 亚洲欧美999| 久久理论片午夜琪琪电影网| 国产精品网址在线| 日av在线播放中文不卡| 久久免费视频观看| 91久久精品久久国产性色也91| 亚洲精品国产suv| 亚洲国产黄色片| 午夜精品视频在线| 国产亚洲视频在线观看| 69国产精品成人在线播放| 色婷婷综合成人| 亚洲精品久久久一区二区三区| 日韩中文字幕在线| 欧美日韩美女视频| 欧美日韩综合视频| 不卡在线观看电视剧完整版| 欧美在线欧美在线|