LA3644——无向图中找环,并查集

来源:互联网 发布:湘潭大学怎么样知乎 编辑:程序博客网 时间:2024/04/28 07:39

题意:有一些简单化合物,每种化合物有两种不同的元素组成,如果在这些化合物中存在k个化合物恰好含有k中不同的元素,则是危险的。

把每种元素看成节点,节点与节点之间的边为化合物,则在该无向图中若存在环,则有上述情况发生。

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 100000 + 10;int pre[maxn], num, res;int Find(int a){    if(pre[a] != a) return pre[a] = Find(pre[a]);    else return a;}int main(){    freopen("in.txt", "r", stdin);    int a, b;    for(int i = 0; i < maxn; ++i) pre[i] = i;    while(~scanf("%d", &a))    {        if(a == -1)        {            printf("%d\n", res);            for(int i = 0; i < maxn; ++i) pre[i] = i;            num = res = 0;            continue;        }        scanf("%d", &b);        if(Find(a) == Find(b) && num >= 2) { res++; }        else        {            pre[pre[a]] = pre[b];            num++;        }    }    return 0;}/*1 23 43 53 12 34 12 66 5-13*/


原创粉丝点击