题解:二分上限mid,然后看匹配的这个值上限了没有,如果没有就直接把这个值加进去,如果上限了就查找里面存的数还有没有其他能匹配的,然后用这个上限值mid能不能都匹配成功,即可
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
bool inline read(int &x){
x = 0;
char c = getchar();
while(c>'9'||c<'0') c = getchar();
while(c>='0'&&c<='9'){
x = x*10+c-'0';
c = getchar();
}
if(c=='\n')
return false;
return true;
}
const int mx = 1e3+5;
int len[mx],y[mx][mx];
bool vis[mx];
vector<int>g[mx];
int n,m;
bool find(int u,int d){
for(int j = 0; j < g[u].size(); j++){
int v = g[u][j];
if(!vis[v]){
vis[v] = 1;
if(len[v]<d){
y[v][len[v]++] = u;