제출 #1242220

#제출 시각아이디문제언어결과실행 시간메모리
1242220KindaGoodGames팀들 (IOI15_teams)C++20
0 / 100
4108 ms589824 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...