嗯。。都是些
最最最基礎的水題
直接模板就ok了。。
剛學的可以一做
1.洛谷 並查集模板
#include#include#include#include#include#include#define n 10005
#define m 200005
using namespace std;
int n,m,p;
int fa[m];
int findf(int x)
void merge(int x,int y)
void solve() }}
int main()
2.vijos1034家族
#include#include#include#include#include#include#define n 5005
#define m 5005
using namespace std;
int n,m,p;
int fa[m];
int findf(int x)
void merge(int x,int y)
void solve()
for(int i=1;i<=p;i++)
}int main()
3.洛谷p1892團夥
#include#include#include#includeusing namespace std;
int n,m;
int flag;
int f[2500];
int find(int x)
int main()
}int s=0;
for(int i=1;i<=n;i++)
if(f[i]==i) s++;
printf("%d",s);
return 0;
}
4.洛谷p2078朋友
#include#include#include#include#include#include#define n 20005
#define m 20005
using namespace std;
int n,m,p,q;
int a[n],b[n];
int findf1(int x)
int findf2(int x)
void merge1(int x,int y) e[m];
bool cmp(node x,node y)
void merge(int x,int y)
int main()
if(tot==n-1)
flag=1;
} printf("%d\n",n-1-tot);
} return 0;
}
7.洛谷p1396 營救(最小生成樹+並查集)
#include#include#include#include#include#include#define n 10005
#define m 20005
using namespace std;
int n,m,s,t;
int fa[n];
struct nodee[m];
void read()
bool cmp(node xx,node yy)e[m];
int findf(int x)
void merge(int x,int y)
void read()
bool cmp(node xx,node yy)e[m];
int findf(int x)
void merge(int x,int y)
void read()
bool cmp(node xx,node yy)
int main()
if(tot==n-1)
} printf("-1");
return 0;
}
最小生成樹 並查集練習
叢林中的路 熱帶島嶼lagrishan的首領現在面臨乙個問題 幾年前,一批外援資金被用於維護村落之間的道路,但日益繁茂的叢林無情的侵蝕著村民的道路,導致道路維修開銷巨大,長老會不得不放棄部分道路的維護。已經知道了每條路每個月的維修費用 單位為aacms 現在長老會需要提出一種方案,即需要保證村落之間...
並查集(最小生成樹)
時間限制 1000 ms 記憶體限制 65536 kb 題目描述 有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使...
並查集 最小生成樹(prim kruskal)
並查集,從名字上來看可以知道,是乙個集合,而且這個集合可以合併和查詢。查詢,主要是查詢集合中的某乙個元素的祖先是誰,某一些元素是不是擁有相同的祖先。合併,是把兩個不想交的集合合併為乙個集合。並查集的思想就是朋友的朋友就是朋友 雖然現實生活中並不是這樣 並查集的第一步初始化,自己是自己的祖先。乙個人來...