1118. Birds in Forest (25)
1118. Birds in Forest (25)
Some scientists took pictures of thousands of birds in a forest. Assume that all the birds appear in the same picture belong to the same tree. You are supposed to help the scientists to count the maximum number of trees in the forest, and for any pair of birds, tell if they are on the same tree.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive number N (<= 104) which is the number of pictures. Then N lines follow, each describes a picture in the format:
K B1 B2 ... BK
where K is the number of birds in this picture, and Bi's are the indices of birds. It is guaranteed that the birds in all the pictures are numbered continuously from 1 to some number that is no more than 104.
After the pictures there is a positive number Q (<= 104) which is the number of queries. Then Q lines follow, each contains the indices of two birds.
Output Specification:
For each test case, first output in a line the maximum possible number of trees and the number of birds. Then for each query, print in a line "Yes" if the two birds belong to the same tree, or "No" if not.
Sample Input:4 3 10 1 2 2 3 4 4 1 5 7 8 3 9 6 4 2 10 5 3 7Sample Output:
2 10 Yes No
並查集,好久不寫都生疏了。。。
#include<iostream>
#include<cstdio>
#include<cstring>
int pre[10005];
bool isroot[10005];
int findfather(int a)
{
return pre[a]==a?pre[a]:findfather(pre[a]);
}
void Union(int a,int b)
{
int aa=findfather(a);
int bb=findfather(b);
if(aa!=bb)
{
pre[aa]=bb;
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=10000;i++)
pre[i]=i;
int max=0;
int index=0;
memset(isroot,false,sizeof(isroot));
for(int i=1;i<=n;i++)
{
int k;
scanf("%d",&k);
for(int j=0;j<k;j++)
{
int bird;
scanf("%d",&bird);
if(j==0)
{
index=bird;
}
if(max<bird)max=bird;
Union(index,bird);
}
}
for(int i=1;i<=max;i++)
{
isroot[findfather(i)]=true;
}
int cnt=0;
for(int i=1;i<=max;i++)
{
if(isroot[i])cnt++;
}
printf("%d %d\n",cnt,max);
int q;
scanf("%d",&q);
for(int i=0;i<q;i++)
{
int a,b;
scanf("%d%d",&a,&b);
if(findfather(a)!=findfather(b))
{
printf("No\n");
}
else printf("Yes\n");
}
return 0;
}
相關文章
- HDU - 6736 F - Forest ProgramREST
- Machine Learning(13)- Random ForestMacrandomREST
- HDU4941Magical Forest(map)REST
- 開發者解讀Angry Birds Evolution的開發創意設計
- 第九篇:隨機森林(Random Forest)隨機森林randomREST
- Segmentation of retinal OCT images using a random forest classifierSegmentationrandomREST
- CF1092E Minimal Diameter ForestREST
- 白話異常檢測演算法Isolation Forest演算法REST
- ML《決策樹(四)Bagging 和 Random Forest》randomREST
- Paper Reading: Cost-sensitive deep forest for price predictionREST
- 「Macos最新」憤怒的小鳥重製版Angry Birds Reloaded for Mac 中文版Mac
- 25
- Causal Inference理論學習篇-Tree Based-Causal ForestREST
- 5/25
- 林軒田機器學習技法課程學習筆記10 — Random Forest機器學習筆記randomREST
- vue25Vue
- 4,25
- Causal Inference理論學習篇-Tree Based-From Uplift Tree to Uplift ForestREST
- Forest v1.5.13 釋出,宣告式 HTTP 框架,已超 1.7k starRESTHTTP框架
- Oracle OCP(25):索引Oracle索引
- 6月25日
- 4月25日
- Day25--NullPointerExceptionNullException
- Java - 25 main方法JavaAI
- 3月25日
- 機器學習演算法系列(十八)-隨機森林演算法(Random Forest Algorithm)機器學習演算法隨機森林randomRESTGo
- 12月25筆記筆記
- 【Google】25匹馬的角逐Go
- BestCoder Round #25 A,B
- 2024/4/25
- 4/25學習程序
- 3/25學習程序
- 2024/3/25
- HTML 25 - Input AttributesHTML
- 07-25 題解
- 2024/5/25
- 最常用的決策樹演算法!Random Forest、Adaboost、GBDT 演算法演算法randomREST
- Forest v1.5.12 釋出,宣告式 HTTP 框架,已超過 1.6k starRESTHTTP框架