#include "teams.h"
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
int n;
vector<pii> arr;
void init(int N, int A[], int B[]) {
n = N;
arr.resize(n);
for(int i = 0; i < n; i++){
arr[i] = {A[i], B[i]};
}
}
bool doMatch(int v, vector<int>& from, vector<vector<int>>& adj, vector<bool>& vis){
if(vis[v]) return false;
vis[v] = true;
for(auto u : adj[v]){
if(from[u] == -1 || doMatch(from[u],from,adj,vis)){
from[u] = v;
return true;
}
}
return false;
}
int can(int m, int sizes[]) {
vector<int> K(m);
for(int i = 0; i < m; i++){
K[i] = sizes[i];
}
int s = 0;
for(int i = 0; i < m; i++){
s += K[i];
}
if(s > n){
return false;
}
vector<vector<int>> adj(n);
int pt = 0;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(arr[j].first <= K[i] && K[i] <= arr[j].second){
for(int k = 0; k < K[i]; k++){
adj[j].push_back(pt+k);
}
}
}
pt += K[i];
}
vector<bool> vis(n);
vector<int> from(s, -1);
for(int i = 0; i < n; i++){
for(auto u : adj[i]){
if(from[u] == -1){
from[u] = i;
break;
}
}
}
for(int i = 0; i < n; i++){
fill(vis.begin(),vis.end(),0);
doMatch(i,from, adj,vis);
}
for(int i = 0; i < s; i++){
if(from[i] == -1){
return false;
}
}
return true;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |