美文网首页
POJ1182(食物链)

POJ1182(食物链)

作者: kimoyami | 来源:发表于2018-10-28 21:38 被阅读9次

链接:https://vjudge.net/problem/POJ-1182
思路:由于已经确定了只有三种关系并且为一个圈,我们如果x->y为0表示同类,x->y为1表示x吃y,x->y为2表示y吃x,那么整个关系可以用模3的加法来传递下去,也就是说我们记录某个点到根节点的关系,合并的时候沿途记录到根节点距离模3的值,即可维护与根节点的关系。如果二者根节点不同,那么他们之前一定没有进行过任何相关的操作,此时正常维护二者的关系。否则判断二者关系是否有误即可。(关系并查集和带权并查集合并时关键需要画出矢量图,总是跟矢量密切相关,矢量图画对了关系就有了)
代码:

#include<cstdio>
using namespace std;

int n,k;
const int maxn = 50010;
int par[maxn];
int rel[maxn];

int getroot(int a){
    if(par[a]==a)return a;
    int px = par[a];
    par[a] = getroot(par[a]);
    rel[a] = (rel[a]+rel[px]+3)%3;
    return par[a];
}

int main(){
    scanf("%d%d",&n,&k);
    for(int i=0;i<=n;i++){
        par[i] = i;
        rel[i] = 0;
    }
    int res = 0;
    for(int i=0;i<k;i++){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        int p1 = getroot(b);
        int p2 = getroot(c);
        if(b>n||c>n){
            res++;
            continue;
        }
        if(a==2&&b==c){
            res++;
            continue;
        }
        if(p1!=p2){
            par[p2] = p1;
            rel[p2] = (3+a-1+rel[b]-rel[c])%3;
        }
        else{
            if(a==1&&rel[b]!=rel[c]){
                res++;
                continue;
            }
            if(a==2&&((3-rel[b]+rel[c])%3)!=a-1){
                res++;
                continue;
            }
        }
    }
    printf("%d\n",res);
    return 0;
}

相关文章

  • POJ1182——食物链

    问题描述 有三类动物A,B,C,这三类动物的食物链构成了有趣的环形:A吃B, B吃C,C吃A。 现有N个动物,以1...

  • POJ1182(食物链)

    链接:https://vjudge.net/problem/POJ-1182思路:由于已经确定了只有三种关系并且为...

  • 食物链POJ1182总结

    这道题是用并查集来解。并查集可以高效的查找某个元素是否属于一个集合。敲代码过程中一次遇到了如下问题: new 的使...

  • 商业位势决定收益极限

    自然界中有“食物链”,“食物链”中不同的生物处于不同的位置,我们将食物链中的位置称之为营养级。比如青草——昆虫——...

  • 生物大量灭绝的原因及航天研究的意义

    在一条食物链中,能量流动的特点是逐级减少的,因此,食物链中生物越靠进食物链的后方,数量就会越少。 例如,一条简单的...

  • 食物链

    又在出差,简短。最近去一个项目,做一个变更~非常不合理的变更。然后,看到了工地上一群人在施工~三伏天,大汗淋漓。突...

  • 食物链

    嗜杀者,都是活在食物链末端。当自食其力都非常艰难时,选择了破坏整个食物链来葬送自己。 今天,公元2...

  • 食物链

    生产者。阳光、空气、水无生命痕迹的物质中自我满足轻吐出颜色、芬芳和氧气它是能量转化的原点不存在消化器官终将被咀嚼默...

  • 食物链

    傍晚的时候,六奶奶送来一罐辣酱。 花生碎和萝卜块做底,腌出酸味的山野菜里浸着细细密密的青椒末。甜辣口儿,一口下去,...

  • 食物链

    八甲镇上新开了间饭店,叫上下。 据说店内只设有两道菜,一道名为上,另一道则叫下。 世上入我店内者分上下两等人,上这...

网友评论

      本文标题:POJ1182(食物链)

      本文链接:https://www.haomeiwen.com/subject/exgmtqtx.html