POJ 2492--A Bug's Life

题目要求根据虫子的交互关系判断是否存在性别间的交互,可以使用DFS寻找奇环或者并查集方法解决。奇环解法通过二分染色与DFS遍历检查环路,而并查集解法通过集合代表虫子关系,判断同一集合内的性别冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:有个专家在研究一种虫子,他认为虫子之间的交互只存在于不同性别的虫子之间,输入给定了试验中观察到的两个虫子之间的一些交互,问根据这些输入能否确定专家的意见。

题解:本题有奇环和并查集两种解法。

  • DFS判断奇环:易知若用输入的关系构成一无向图,则相同性别之间的交互必定存在于环路中,而且必须是奇环。类似于POJ 2942,可以采用二分染色,用DFS遍历图中的每一条边,当遍历到后向边时(说明有环),且与其祖先的颜色相同则说明存在奇环。
  • 并查集:类似于POJ 1703,用集合代表有关系的虫子,集合内元素的关系则可以通过它们和根节点的关系求得。若根据输入中有交互的虫子,查询它们属于同一集合,并且根据以前的输入已知它们属于同一种性别,则它们的交互证明了教授是错的。

DFS奇环:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxN 2005

char graph[maxN][maxN];

class solve
{
private:
    int N,M,S;
    char color[maxN];
public:
    solve(int n,int m,int s):N(n),M(m),S(s)
    {
        memset(graph,0,sizeof(graph));
        memset(col
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值