POJ 1308(並查集,判連通,無環)

2021-08-15 16:04:21 字數 1415 閱讀 6955

題意:

給定一組資料(u,

v)代表u指向

v。判斷這組資料是否形成一棵樹。

題解:

利用樹的特性:連通且無環。或者利用樹的性質:無環

(或者聯通)且

v=e+1

無環可以用並查集去判定。連通可以根據並查集確定有幾個根節點來判斷。

邊數

v是加的邊數,點

e可以用

set得出。

①:無環。e=v+1。

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

int pa[1000];

vectorc;

int findset(int x)

sets;

int main()

if((flag&&s.size()==num+1)||s.size()==0)printf("case %d is a tree.\n",++k);//沒有節點也定義為樹。

else

printf("case %d is not a tree.\n",++k);

}}

②:無環連通

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

int pa[1000];

vectorc;

int findset(int x)

sets;

int main()

set::iterator it;

for(it=s.begin(); it!=s.end(); it++)

if(pa[*it]==-1)sum++;

if((flag&&sum==1)||s.size()==0)printf("case %d is a tree.\n",++k);//沒有節點也定義為樹。

else

printf("case %d is not a tree.\n",++k);

}}

poj1308 簡單並查集

題目鏈結在這裡 題目大意 給出點和邊,問能否構成一棵樹 思路 用並查集水過去就行了。hdu1272和這道題一樣的,就是換了個題面和輸出。hdu1272 如下 include include include include define rep i,n for int i 0 i n i define...

poj 1308 並查集判斷「樹」

思路 並查集 includeusing namespace std int pre 500 bool vis 500 void make set 初始化 int find set int x void join int x,int y 並 int main make set bool flag tr...

並查集判環(裸

題目大意 有一些化合物,每個化合物都由兩種元素組成的 每個元素用乙個大寫字母表示 你是乙個裝箱的工人,從實驗員那裡按照順序依次把一些簡單化合物裝到車上。但這裡存在乙個安全隱患 如果車上存在k個簡單的化合物,正好包含k中元素,那麼它們將組成乙個易爆的混合物。為了安全起見,每當你拿到乙個化合物時,如果它...