PAT - - 친구 권

2352 단어 병 찰 집
한 학교 에는 N 명의 학생 이 있어 M 개의 클럽 을 만 들 었 다.각 클럽 의 학생 들 은 어느 정도 비슷 한 취 미 를 가지 고 친구 권 을 형성한다.한 학생 은 여러 개의 다른 클럽 에 동시에 속 할 수 있다.'내 친구 의 친구 도 내 친구' 라 는 추론 에 따 르 면 A 와 B 가 친구 이 고 B 와 C 가 친구 라면 A 와 C 도 친구 라 는 것 을 알 수 있다.최대 친구 권 에 몇 명 이 있 는 지 계산 하 는 프로그램 을 만들어 보 세 요.
입력 형식:
입력 한 첫 줄 은 두 개의 정수 N (≤ 30000) 과 M (≤ 1000) 을 포함 하고 각각 학교의 학생 총수 와 클럽 의 개 수 를 대표 한다.뒤의 M 줄 은 각 줄 마다 다음 과 같은 형식 으로 1 개의 클럽 의 정 보 를 제공 하 는데 그 중에서 학생 들 은 1 ~ N 번호 에서 i Mi( ) 1( ) 2 … Mi
출력 형식:
출력 은 최대 친구 권 에 몇 명 이 있 는 지 를 나타 내 는 정 수 를 보 여 줍 니 다.
입력 예시:7 4
3 1 2 3
2 1 4
3 5 6 7
1 6

출력 예시:4 --------------------------------------

, quicksort , , , max 。              。
, , , , , , max , max ,
-------------------------------------- 

#include
#define MAX 30005
int f[MAX]={0};
int getf(int v){
    if(f[v]==v)
    return v;
    else
    f[v]=getf(f[v]);
    return f[v];
}
void merge(int v,int u){
    int t1=getf(v);
    int t2=getf(u);
    if(t1!=t2);
    f[t2]=t1;
    return;
}
int main(void){
    int n;
    scanf("%d",&n);
    int m;
    scanf("%d",&m);
    for(int i = 1; i <= n; ++i){
        f[i]=i;
    }
    for(int i = 1;i <= m; ++i){
        int p,p1,p2;
        scanf("%d",&p);
        scanf("%d",&p1);
        p -= 1;
        while(p>0){
            scanf("%d",&p2);
            merge(p1,p2);
            p--;
        }
    }
        int temp[MAX]={0};
        int max=-1;
        int t;
        for(int i = 1; i <= n; ++i){
            t=getf(i);
            temp[t]++;
            if(max

좋은 웹페이지 즐겨찾기