PAT-L1-020. 帅到没朋友

来源:互联网 发布:泰国4g网络制式 编辑:程序博客网 时间:2024/06/06 17:09

并查集···

比赛时紧张···脑抽 没写出来···

不过15分的题····他们说不用并查集也能AC···

好吧···

我的思路:查询该点ID时判断 他的前驱结点Par[ID}是否为其本身并且他的孩子数为1(初始化本人为该ID的一个孩子)

那么可以判断 他没有朋友圈或者他是个自恋狂(朋友圈只有他一人)····

#include<cstdio>#include<cstring>#include<vector>#include<iostream>using namespace std;const int Size = 100000;int Par[Size];int Visited[Size];int Child[Size];int Get_Par(int a){    if( Par[a]!=a )        return Par[a]=Get_Par(Par[a]);    return Par[a];}void Merge(int a,int b){    int ParA=Get_Par(a);    int ParB=Get_Par(b);    Par[ParA]=ParB;    Child[ParB]+=Child[ParA];    //cout<<a<<"'s father is "<<Get_Par(a)<<" "<<b<<"'s father is"<<Get_Par(b)<<endl;}int main(){    int N;int k;int T;    int ID;    cin>>N;    for(int i=0; i<Size; i++){        Par[i]=i;        Child[i]=1;    }    memset(Visited,0,sizeof(Visited));    //memset(Child,0,sizeof(Child));    while(N--){        cin>>k;        cin>>T;k--;        while(k--){            cin>>ID;            Merge(T,ID);        }        //cout<<T<<"'s child is "<<Child[T]<<endl;        //cout<<ID<<"'s child is "<<Child[ID]<<endl;    }    int M;    cin>>M;    vector<int>Vec;    while(M--){        cin>>T;        int ParT=Get_Par(T);        if(!Visited[T]){            Visited[T]=1;            if(ParT==T&&Child[T]==1){                Vec.push_back(T);            }        }    }    if(Vec.size()){        for(int i=0; i<Vec.size(); i++){            if(i)                printf(" %05d",Vec[i]);            else                printf("%05d",Vec[i]);        }    }    else        cout<<"No one is handsome"<<endl;}


0 0
原创粉丝点击