判斷第k
個線段的集合中一共有幾條線段。
先用並查集將相交的線段合併記錄,最後查詢sum陣列即可。
#include#include#includeusing namespace std;
struct node
s[2004];
struct edge
e[2005];
int fa[2005];
int sum[2005];
int t,n,cha;
char c;
int m=0;
double direction (node p0, node p1, node p2)
bool on_segment (node p0, node p1, node p2)//判斷線段相交
bool segments_intersect (node p1, node p2, node p3, node p4)
//並查集操作
void init()
}int find(int x)
void combine(int x,int y)
int main()
{ cin>>t;
while(t--)
{ cout<<(m++?"\n":"");
cin>>n;
init();
int cixu=1;
for(int i=1;i<=n;i++)
{ cin>>c;
if(c=='p')
{cin>>e[cixu].a.x>>e[cixu].a.y>>e[cixu].b.x>>e[cixu].b.y;
e[cixu].num=cixu;
for(int j=1;j>cha;
cout<
hdu 1558 線段相交 並查集
題意 給你一些操作,p後邊輸入四個值,分別代表一條線段的起點 終點座標,當輸入q時,後邊輸入乙個整形值k,輸出第k條線段所在的集合中包含的線段的個數。解題思路 線段相交 並查集,sum i 表示i所在的線段集合中,i為根節點的線段總數。在合併時可以更新。include includeusing na...
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...