#include<iostream>#include<vector>#include<cstring>usingnamespace std;constint maxn =10010;structbird{int id;int root;//同一颗树上的根结点小鸟} Bird[maxn];int n, k, num =0, treeNum =0;
vector<int> Adj[maxn];bool isVis[maxn];voidDFS(int v,int&root){
Bird[v].root = root;
isVis[v]=true;for(int i =0; i < Adj[v].size();i++){int u = Adj[v][i];if(isVis[u]==false){DFS(u, root);}}}intmain(){memset(isVis,false,sizeof(isVis));scanf("%d",&n);int tNum, a, b;for(int i =0; i < n;i++){scanf("%d%d",&tNum,&a);if(a>num)
num = a;for(int j =1; j < tNum;j++){scanf("%d",&b);if(b>num)
num = b;
Adj[a].push_back(b);
Adj[b].push_back(a);}}for(int i =1; i <= num;i++){if(isVis[i]==false){
treeNum++;int root = i;//就以一颗树上第一个鸟i为根小鸟DFS(i, root);}}printf("%d %d\n", treeNum, num);scanf("%d",&k);for(int i =0; i < k;i++){scanf("%d%d",&a,&b);if(Bird[a].root!=Bird[b].root)printf("No\n");elseprintf("Yes\n");}return0;}
1118 Birds in Forest (25 分)DFS解法#include<iostream>#include<vector>#include<cstring>using namespace std;const int maxn = 10010;struct bird{ int id; int root; //同一颗树上的根结点小鸟} Bird[maxn];int n, k, num = 0, treeNum = 0;vec