不是匹配
时间限制:
1000 ms | 内存限制:
65535 KB
-
描述
-
有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
找出谁参加的活动最多,将这个最多的活动数记为max1,再找哪个活动被参加的最多,将这个被参加最多的活动数记为max2,比较两者大小,如果max2>max1 就输出max2;否则再找出没有被参加的活动数记为shu,并输出shu+max1:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node{ int ren,huodong; }a[1010]; int t; int n,m; int vis[1010][1010]; int jishu[1010]; int suan[1010]; int b[1010]; int main() { scanf("%d",&t); while(t--) { memset(jishu,0,sizeof(jishu)); memset(suan,0,sizeof(suan)); memset(b,0,sizeof(b)); scanf("%d%d",&n,&m); for(int i=0; i<=n; i++){ for(int j=0; j<=n; j++){ vis[i][j] = 0; } } for(int i=1; i<=m; i++) { scanf("%d%d",&a[i].ren,&a[i].huodong); b[a[i].ren]=1; if(vis[a[i].ren][a[i].huodong] == 0){ jishu[a[i].ren]++; suan[a[i].huodong]++; vis[a[i].ren][a[i].huodong] = 1; } } int max1=0,max2=0,shu=0; for(int i=1; i<=n; i++){ if(jishu[i]>max1) max1 = jishu[i]; if(suan[i]>max2) max2 = suan[i]; } for(int i=1;i<=n;i++){ if(b[i]==0) shu++; } if(max1<max2) printf("%d\n",max2); else printf("%d\n",max1+shu); } return 0; }//明明知道咋做,,代码实现能力不行啊 ,好半天了。。。
-
一个数T 表示T 组数据