hdu 1558 線段相交 並查集

2021-07-11 18:04:41 字數 905 閱讀 9333

題意:給你一些操作,p後邊輸入四個值,分別代表一條線段的起點、終點座標,當輸入q時,後邊輸入乙個整形值k,輸出第k條線段所在的集合中包含的線段的個數。

解題思路:線段相交+並查集,sum[i]表示i所在的線段集合中,i為根節點的線段總數。在合併時可以更新。

#include#includeusing namespace std;

struct point

;struct edge

e[1010];

int fa[1010],sum[1010];

int find(int x)

void union(int x,int y)

}double xmult(point a,point b,point c) //大於零代表a,b,c左轉

bool onsegment(point a,point b,point c) //a,b,c共線時有效

bool cross(point a,point b,point c,point d) //判斷ab 與cd是否相交

int main()

{ int t,n,k,tmp,i,j;

char s[10];

scanf("%d",&t);

while(t--)

{scanf("%d",&n);

k = 0;

for(int i = 1; i <= n; i++)

sum[i] = 1, fa[i] = i;

for(int i=1;i<=n;i++)

{scanf("%s",s);

if(s[0]=='p')

{k++;

scanf("%lf%lf%lf%lf",&e[k].a.x,&e[k].a.y,&e[k].b.x,&e[k].b.y);

for(int j=1;j

hdu1558並查集 線段相交

hdu1558 關於線段相交的內容參考演算法導論p577 include include includeusing namespace std int pre 1010 sum 1010 struct point struct edge edge 1010 int e 邊數 int find int...

hdu 1558 線段相交判斷 並查集

2535437 2010 06 12 00 42 04 accepted 1558 109ms 256k 2695 b c t t include include include using namespace std struct point struct sdlxd 1002 int p 100...

hdu1558 並查集 判斷線段相交

簡單的計算幾何題,判斷兩線段是否相交。將相交的兩線段使用並查集歸到一類中。查詢時輸出線段對應集合中元素的個數。includestruct point struct segmentnode 1010 int n,parent 1010 int getabs int value int getparen...