POJ 1108 食物链 并查集 + 向量偏移

来源:互联网 发布:羽戈 知乎 编辑:程序博客网 时间:2024/04/28 05:01

POJ 1108 向量偏移

这题数据似乎有问题,只能用单组读入才给过!

今天终于是自己 A 的了

贴代码(AC,250MS)

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int MAX = 1e5 + 5;int f[MAX], r[MAX], ans;void init(int n){    for(int i = 1; i <= n; ++i)        f[i] = i, r[i] = 0;    ans = 0;}int find(int a){    if(a == f[a])        return a;    int t = f[a];    f[a] = find(t);    r[a] = (r[a] + r[t]) % 3;    return f[a];}void uni(int a, int b, int rs){    int fa = find(a), fb = find(b);    if(fa != fb){        f[fa] = fb;        r[fa] = (3 - r[a] + r[b] + rs) % 3;    }    else{        if((3 + r[a] - r[b]) % 3 != rs)            ans ++;    }}int main(){    int n, m, a, b, d;    scanf("%d%d", &n, &m);    init(n);    while(m--){        scanf("%d%d%d", &d, &a, &b);        if(a > n || b > n || (a == b && d == 2))            ans ++;        else            uni(a, b, d - 1);    }    printf("%d\n", ans);    return 0;}


原创粉丝点击