題意:給你一些操作,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...