题目传送门
思路:由于k小于等于3 所以至多有三场比赛 当只有一场比赛的时候 答案就是参加比赛的人数
两场比赛的时候就是 max(只参加1,只参加2)加上1、2都参加
三场比赛也是同理 但需要用到贪心策略
先把1 2、1 3 、2 3 全部消耗掉 可以分别和3、2、1匹配然后最终只剩下 1 、2、3 取剩下最大值即可~
代码语言:javascript复制#include<bits/stdc .h>
using namespace std;
const int N=1e5 10;
int n,a[N],k,st[N],num[N];
int main(){
cin>>n>>k;
for(int i=0;i<k;i ){
int x;
cin>>x;
for(int j=0;j<x;j ){
int tep;
cin>>tep;
st[tep]|=(1<<i);
}
}
for(int i=1;i<=n;i ){
num[st[i]] ;
}
if(k==1){
cout<<num[1]<<endl;
return 0;
}
else if(k==2){
int ans=num[3],test=max(num[1],num[2]);
cout<<ans test<<endl;
return 0;
}
int ans=num[7];
ans =num[6],num[1]-=min(num[1],num[6]);
ans =num[3],num[4]-=min(num[4],num[3]);
ans =num[5],num[2]-=min(num[2],num[5]);
ans =max(num[1],max(num[4],num[2]));
cout<<ans<<endl;
}