學習kruskal的時候我們學習了並查集,那時候都是不帶權值的。今天找了一些並查集的題目寫了下,寫題時也參考了大牛的部落格
1.rank of tetris
**如下:
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
const int maxn=10000+5;
const int inf = 1e9;
struct node
;} s[maxn];
vectorp[maxn];
int pre[maxn],in[maxn],sum,n;
void init()
else
}top_sort();
}}
帶權值,我們用num陣列記錄,然後將輸入的資料進行排序
**如下:
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
const int maxn1=10000+5;
struct node
j++;
}ans[p[i].id]=sum;
}for(int i=1; i<=q; i++)
printf("%lld\n",ans[i]);
}return 0;
}
hdu 3172
水題!!!
**如下:
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
const int maxn = 100000 +5 ;
int pre[maxn],num[maxn];
mapm;
void init()
cout<
hdu 3635
強力推薦這題 在我們更新根節點的時候,也要更新移動的次數
**如下:
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
const int maxn = 10000 +5 ;
int pre[maxn],num[maxn],mov[maxn];
int find(int x)
return x;
}void join(int x,int y)
}void init(int n)
}int main()
else}}
}}
hdu 2473
刪除節點,
首先將0~n-1的根節點設為n~2n-1,將2n~2n+m-1作為備用節點。刪除操作時將x的根節點置為備用節點,然而實際上x的節點資訊之前已經對映到x+n中,那麼x+n的兄弟節點的根節點資訊依然保留了下來。詳細看這:
**如下:
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
const int maxn = 1e5 +5 ;
const int maxm = 1e6 +5;
int pre[maxn*2+maxm];
int cot,n,m;
inline void init()
return 0;
}
並查集的題目還有一些還沒寫,比如poj的食物鏈。之後會也寫上 並查集習題
時間限制 150 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 布置宴席最微妙的事情,就是給前來參宴的各位賓客安排座位。無論如何,總不能把兩個死對頭排到同一張宴會桌旁!這個艱鉅任務現在就交給你,對任何一對客人,請編寫程式告訴主人他們是否能被安排同...
並查集 總結
自己學完後總結一下吧,並查集,我的理解就是乙個查詢與合併,用乙個find函式來查詢自己的祖先也就是根節點,在這過程中還可以進行路徑壓縮,就是讓這個點直接變到根節點之下,還有就是合併,找出這兩個點的根節點,如果根節點不相同的話,就將乙個根節點放到另乙個根節點下面。這道題的就是用並查集做,找出總共有幾個...
並查集總結
用自己的理解來寫好了 有些地方可能不對 不定時更新理解 操作主要為三步 一 初始化 void init 二 查詢 這個為路徑壓縮 就是每次查詢時更新 查詢節點 x 上面所有節點直接使他們連向根節點 每次查詢更新 int find int x 另一種路徑壓縮 不過麻煩了些 作為理解 int find ...