PAT-A1118

    xiaoxiao2021-03-25  91

    #include<stdio.h> #include<set> #include<algorithm> using namespace std; int n, Q, sum=0; int father[10010]; bool isfather[10010]={false}; set<int> st; int findfather(int x){ int a=x, aa; while(father[x]!=x){ x=father[x]; } int fa=x; while(father[a]!=a){ aa=a; father[a]=fa; a=father[aa]; } return fa; } void unionn(int a, int b){ int faA=findfather(a); int faB=findfather(b); if(faA!=faB)father[faA]=faB; } int main(){ int i, j, k, temp, last, t1, t2; for(i=0;i<10010;i++)father[i]=i; fill(isfather,isfather+10010,false); scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&k); for(j=0;j<k;j++){ scanf("%d",&temp); st.insert(temp); if(j>0)unionn(last,temp); last=temp; } } int len=st.size(); for(i=1;i<=len;i++){ isfather[findfather(i)]=true; } for(i=1;i<=len;i++){ if(isfather[i]==true)sum++; } printf("%d %d\n",sum,st.size()); scanf("%d",&Q); for(i=0;i<Q;i++){ scanf("%d%d",&t1,&t2); if(findfather(t1)==findfather(t2))printf("Yes\n"); else printf("No\n"); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-6108.html

    最新回复(0)