幾點教訓:(1)將資料輸入完成後再進行合併
(2)兩個矩形有交點的函式如果用必然有乙個點的座標在另乙個矩形內這個原理來寫,一共有8種情況,不能遺漏,下面是ac**:
#include#include#includeusing namespace std;
const int maxn=105;
struct node
p[maxn];
int vis[maxn];
int n,cnt;
void init()
int finds(int x)
void unions(int a,int b)
}bool judge(node a,node b)
int main()
//輸入完資料在進行查詢和合併
for(int i=1; i<=n; i++)
for(int j=i+1; j<=n; j++)
if(judge(p[j],p[i]))
unions(j,i);
for(int i=1; i<=n; i++)
vis[finds(i)]=1;//看看有多少根節點
for(int i=1; i<=n; i++)
if(vis[i])
cnt++;
printf("%d\n",cnt);
}return 0;
}
SDNU 1016 矩形合併 並查集
1016.矩形合併 time limit 1000 ms memory limit 32768 kb total submission s 242 accepted submission s 49 description 平面上有n個矩形,給定每個矩形的左下角座標和右上角座標。如果把重合的矩形合併成...
按秩合併並查集
1.通過比較並查集的大小來連邊,將小的 u 向大的 v 連邊,這樣對於大的並查集,查詢代價不變,而小的並查集查詢代價每個點增加了1,相當於增加了siz u 反過來則變成了siz v siz u logn 因為每上一層大小減半 2.相較於路徑壓縮的並查集,他可以保留原始的資訊 例題 bzoj4668 ...
leetcode 721 賬戶合併 並查集
查詢並返回所在集合的根節點 find 注意 根節點特性是 father i i 每次查詢時進行路徑壓縮,保證集合樹的高度不大於2 int find int i return f 根節點 合併兩個元素所在集合 combine void combine int i,int j 本題的重點是抽象 對映 確...