HDU-3118-Arbiter(二分图的性质+删最小的边得到一个二分图)

该博客探讨了HDU-3118竞赛题目,涉及二分图的性质,即在恒星间的通道图中,人们返回起点时手性变化必须是偶数次以确保安全。为了解决KMXS的问题,需要找到最小数量的边来禁止,使任意起点到终点的路径手性变化次数为偶数。博客提供了利用二分图理论求解的方法,通过枚举节点分配到二分图的左右两侧,并删除同侧连接的边,实现二分图的构造。并给出了两种实现方式(邻接矩阵和邻接表)的代码示例。

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

题目

问题描述

每个人都有手性,左手或右手。事实上,所有的人都必须和具有相同手性的食物生活在一起。当一个人把仲裁者从一颗恒星带到另一颗恒星时,他的手性就会发生变化(从左手变成右手,或者从右手变成左手)。然而,如果一个人走了很长一段路,最终回到了自己的星球,那么他的手性可能会发生改变,变成与原来相反的状态,这将会导致致命的精神障碍,甚至死亡。
意思就是从自己的星球出发然后回到自己的星球,必须是走的边是偶数。

KMXS在恒星之间有通道图,他需要禁止最小数量的通道旅行,这样当一个人得到他的恒星时,无论他从哪里开始旅行,他都是安全的。KMXS求助于你。

输入

第一行输入包含一个整数T,表示测试用例的数量。

每种情况的第一行由两个整数N和M组成,表示星星的数量和通道的数量。接下来的M行每一行表示一个通道(u, v)这意味着在星u和星v之间有一个双向通道(u不等于v)

输出

为每种情况在单行上输出一个整数,表示为避免精神障碍,KMXS必须禁止的最小通道数。

0 < T <= 10
0 <= N <= 15 0 <= M <= 300
0 <= u, v < N,两颗恒星之间可能有多个通道。

Sample Input

1
3 3
0 1
1 2
2 0

Sample Output

1
二分图的性质就是这样的都是偶数边。故这个题可以转化为最小删除几条边可以将这个无向图分成两部分,变成二分图。
枚举每个图中的点是在二分图的左边还是右边。
将左边内部之间的边删除,右边内部之间的边删除。
由于n不是很大。采用二进制枚举。
邻接矩阵和邻接表的代码都贴一下。

#include <cstring>
#include <algorithm>
#define m(a,b) memset(a,b,sizeof a)
typedef long long ll;
using namespace std;
const int N=155;
const int INF=0x3f3f3f3f;
struct Edge{
   
   int from,to;}edge[N*N];
int tot,n,m;
template<class T>void rd(T &x)
{
   
   
    x=0;int f=0;char ch=getchar();
    while(ch<'0'||ch>'9')  {
   
   f|=(ch=='-'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值