POJ 2524 Ubiquitous Religions

来源:互联网 发布:mac 删除输入法记忆 编辑:程序博客网 时间:2024/05/01 05:40

给出学生总数n,询问m对学生信仰是否一样,输入m行信仰一样的学生,输出信仰种类数量。
并查集入门(反正我就是用它入门的)

#include<iostream>#include<cstdio>#include<set>#include<map>#include<vector>using namespace std;struct node{    int par;    int rank;}s[100000];int cnt;void init(int n){             //初始化    for (int i = 1; i <= n; i++){        s[i].par = i;    }}int find(int x){                //压缩路径    if (s[x].par == x)return x;    else return s[x].par = find(s[x].par);}void unite(int x, int y){       //合并集合    x = find(x);    y = find(y);    if (x == y)return;        cnt--;                    //计算合并次数    if (s[x].rank < s[y].rank){        s[x].par = y;    }    else    {        s[y].par = x;        if (s[x].rank == s[y].rank)s[x].rank++;    }}int main(){    int n, m;    int num = 1;    while (~scanf("%d%d", &n, &m)){        if (n == 0 && m == 0)break;        init(n);         cnt = n;        for (int i = 0; i < m; i++){            int a, b;            scanf("%d%d", &a, &b);            unite(a, b);        }        printf("Case %d: %d\n", num, cnt);        num++;    }}
0 0
原创粉丝点击