zoukankan      html  css  js  c++  java
  • 【PAT甲级】1118 Birds in Forest (25分)(并查集)

    题意:

    输入一个正整数N(<=10000),接着输入N行数字每行包括一个正整数K和K个正整数,表示这K只鸟是同一棵树上的。输出最多可能有几棵树以及一共有多少只鸟。接着输入一个正整数Q,接着输入Q行每行包括两个正整数,输出它们是否在同一棵树上。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int fa[10007];
     5 int vis[10007];
     6 int find_(int x){
     7     if(x==fa[x])
     8         return x;
     9     return fa[x]=find_(fa[x]);
    10 }
    11 int main(){
    12     ios::sync_with_stdio(false);
    13     cin.tie(NULL);
    14     cout.tie(NULL);
    15     int n;
    16     cin>>n;
    17     for(int i=1;i<=10000;++i)
    18         fa[i]=i;
    19     for(int i=1;i<=n;++i){
    20         int k;
    21         cin>>k;
    22         int temp=0;
    23         for(int j=1;j<=k;++j){
    24             int x;
    25             cin>>x;
    26             vis[x]=1;
    27             int f=find_(x);
    28             if(j==1)
    29                 temp=f;
    30             fa[f]=temp;
    31         }
    32     }
    33     int cnt=0;
    34     int sum=0;
    35     for(int i=1;i<=10000;++i)
    36         if(fa[i]==i&&vis[i])
    37             ++cnt;
    38         else if(vis[i])
    39             ++sum;
    40     cout<<cnt<<" "<<cnt+sum<<"
    ";
    41     int q;
    42     cin>>q;
    43     while(q--){
    44         int a,b;
    45         cin>>a>>b;
    46         if(find_(a)==find_(b))
    47             cout<<"Yes
    ";
    48         else
    49             cout<<"No
    ";
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    【转】SMARTY 不乱码截取中文
    godaddy最新优惠码
    javascript 学习之屏幕尺寸获取。
    IE6 实现minwidth
    css 修改页面选中时背景颜色
    jQuery 闪动的文字提示
    jQuery插件 blockUI
    HTML 5 video 视频标签全属性详解
    linux打包压缩命令汇总
    Windows 下MySQL zip 安装
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12373307.html
Copyright © 2011-2022 走看看