題意:
給定一組資料(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中元素,那麼它們將組成乙個易爆的混合物。為了安全起見,每當你拿到乙個化合物時,如果它...