您当前的位置: 首页 > 

先求一个导

暂无认证

  • 0浏览

    0关注

    291博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

食物链(带权并查集)

先求一个导 发布时间:2022-03-08 21:32:10 ,浏览量:0

题目 题意: 有三类动物,A吃B、B吃C、C吃A。现在给出k句话,判断有多少句话为假话。如果某句话与前边的话形成的条件存在冲突,默认这句话为假,否则为真。 1 x y: x和y为同类 2 x y: x吃y **思路:**维护带权并查集,0:与祖宗同类,1:吃祖宗那一类,2:被祖宗吃。 在这里插入图片描述

时间复杂度: O(n + k*α(n)) 代码:

// Problem: 职业玩家
// Contest: QDUOJ
// URL: https://qduoj.com/problem/22Spring10
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define OldTomato ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define fir(i,a,b) for(int i=a;in) {ans ++ ; continue;}
        int u = find(x),v = find(y);
        if(op == 1) //A、B是同类
        {
            if(u == v && ((d[x]-d[y])%3 != 0))
            {
            	ans ++ ;
            }
            else if(u != v)
            {
            	fa[u] = v;
            	d[u] = d[y] - d[x];  
            }
        }
        else
        {
        	if(u == v && ((d[x]-d[y]-1)%3 != 0))
        	{
        		ans ++ ; 
        	}
        	else if(u != v)
        	{
        		fa[u] = v;
        		d[u] = d[y] - d[x] + 1;
        	}
        }
    }
    write(ans);
}
signed main(void)
{  
   T = 1;
   // OldTomato; cin>>T;
   // read(T);
   while(T--)
   {
   	 solve();
   }
   return 0;
}

关注
打赏
1662037414
查看更多评论
立即登录/注册

微信扫码登录

0.0452s