码迷,mamicode.com
首页 > 其他好文 > 详细

P2024 食物链

时间:2019-07-04 14:16:10      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:turn   name   str   cstring   mat   content   problem   带权并查集   并查集   

题面:https://www.luogu.org/problemnew/show/P2024

本题是带权并查集模板题,要注意的是种类一共有三种,之后套公式判断是否合法,记录不合法即可。

Code:

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=50005;
int f[N],p[N],n,k,ans;
int find(int x){
    if(x!=f[x]){
        int fa=f[x];
        f[x]=find(f[x]);
        p[x]=(p[x]+p[fa])%3;
    }
    return f[x];
}
bool unionn(int d,int x,int y){
    int fx=find(x),fy=find(y);
    if(fx==fy){
        if((p[y]-p[x]+3)%3!=d){
            return 1;
        }
        else{
            return 0;
        }
    }
    f[fy]=fx;
    p[fy]=(p[x]-p[y]+d+3)%3;
    return 0;
}
int main(){
    int d,x,y;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){
        f[i]=i;
        p[i]=0;
    }
    for(int i=1;i<=k;i++){
        scanf("%d%d%d",&d,&x,&y);
        if(x>n||y>n||(x==y&&d==2)){
            ans++;
            continue;
        }
        if(unionn(d-1,x,y)){
            ans++;
        }
    }
    printf("%d\n",ans);
    return 0;
}

P2024 食物链

标签:turn   name   str   cstring   mat   content   problem   带权并查集   并查集   

原文地址:https://www.cnblogs.com/ukcxrtjr/p/11131958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!