【南阳1291】河南多校训练

本文探讨了一个活动匹配问题,其中N个人分别对2或3个活动感兴趣,而每个活动也只有2个人感兴趣。目标是最小化所有人完成其感兴趣的活动所需的总天数。通过分析,给出了一种算法实现方式,即首先统计每个人的兴趣数量及各活动的关注者数量,再按降序排序后取最大值作为所需最少天数。

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

不是匹配

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述
 有N个人,N个活动, 每个人只会对2个或者3个活动感兴趣,
 每个活动也只有两个人或者两个活动对它兴趣,每个人参加一个
 感兴趣的活动需要一天 ,且当天该活动被参加时,其他的人不能参加
 如果每个人都参加完自己有兴趣的活动,应当怎样安排使得所用总天数时间最短
2<= N <=1000, 1<=m<=1000;

输入
一个数T 表示T 组数据
每组一个N表示人数,编号1 -- N , 一个数 m ,接下来m 行每个两个数
x,y, 表示第 x 个人对第y个活动感兴趣
输出
每组输出一个整数,表示最少天数
样例输入
1
3 6 
1 1 
1 2 
2 2
2 3 
3 1 
3 3 
样例输出

2

这道题应该是签到题,考思维的,然而看着别人不停地ac,本渣渣却想了半天,敲了半天,一直wa.....智商啊!!

01.#include<cstdio>
02.#include<cstring>
03.#include<algorithm>
04.using namespace std;
05.int a[1103];//每个同学喜欢的活动个数
06.int b[1103];//该活动被多少人喜欢
07.bool cmp(int x,int y)
08.{
09.return x>y;
10.}
11.int main()
12.{
13.int n,m,x,y;
14.int t;
15.scanf("%d",&t);
16.while(t--)
17.{
18.memset(a,0,sizeof(a));
19.memset(b,0,sizeof(b));
20.scanf("%d%d",&n,&m);
21.while(m--)
22.{
23.scanf("%d%d",&x,&y);
24.a[x]++;
25.b[y]++;
26.}
27.sort(a,a+1103,cmp);
28.sort(b,b+1103,cmp);
29.int ans=max(a[0],b[0]);
30.printf("%d\n",ans);
31.}
32.return 0;
33.}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值