uva10608 (并查集)

来源:互联网 发布:db2关闭数据库的命令 编辑:程序博客网 时间:2024/06/06 08:53

题目大意:
A跟B是朋友,B跟C是朋友。那么A与C也是朋友。
给出朋友的关系,问最多可以有多少个人是朋友

思路:
并查集

代码:

#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <queue>int f[30005];int rank[30005];int size[30005];int x[500005],y[500005];int m,n;void init() {    for(int i = 0; i <= n; i++) {        size[i] = 1;        f[i] = i;        rank[i] = 0;    }}int find(int x) {    int k = x;    while(k != f[k]) {        k = f[k];    }    return  k;}int Union(int x,int y) {    if(rank[x] > rank[y]) {        f[y] = x;        size[x] += size[y];    }    else {        f[x] = y;        size[y] +=size[x];        if(rank[x] == rank[y])            rank[y]++;    }}int main() {    int T;    scanf("%d",&T);    while(T--) {        scanf("%d %d",&n,&m);        init();        for(int i = 0; i < m; i++)            scanf("%d %d",&x[i],&y[i]);        for(int i = 0; i < m; i++) {            int a = find(x[i]);            int b = find(y[i]);            if(a != b)                Union(a,b);        }        int _max = 1;        for(int i = 1; i <= n; i++ ) {            //cout << size[i] <<endl;            if(size[i] > _max )                _max= size[i];        }        printf("%d\n",_max);    }    return 0;}
0 0
原创粉丝点击