// UVa 11045 - My T-shirt suits me #include <map> #include <stdio.h> #include <string> #include <vector> using namespace std; class MaximumCardinalityBipartiteMatching { private: vector<bool> visited; vector<vector<int> > edges; vector<int> owner; bool isThereAnAugmentingPathFrom(int leftNode) { if (visited[leftNode]) return false; visited[leftNode] = true; for (int i = 0; i < edges[leftNode].size(); i++) { int rightNode = edges[leftNode][i]; if (owner[rightNode] == -1 || isThereAnAugmentingPathFrom(owner[rightNode])) { owner[rightNode] = leftNode; return true; } } return false; } public: int getMaximumCardinality(const vector<vector<int> > & p_edges, int numberOfVerticesOnTheRight) { edges = p_edges; owner.assign(numberOfVerticesOnTheRight, -1); int cardinality = 0; for (int leftNode = 0; leftNode < edges.size(); leftNode++) { visited.assign(edges.size(), false); if (isThereAnAugmentingPathFrom(leftNode)) { cardinality++; } } return cardinality; } }; int main() { map<string, int> sizes; sizes["XXL"] = 0; sizes["XL"] = 1; sizes["L"] = 2; sizes["M"] = 3; sizes["S"] = 4; sizes["XS"] = 5; int cases; scanf("%d", &cases); for (; cases; cases--) { int numberOfTshirts, numberOfVolunteers; scanf("%d %d", &numberOfTshirts, &numberOfVolunteers); int numberOfTshirtsPerSize = numberOfTshirts / 6; vector<vector<int> > edges(numberOfTshirts); for (int volunteer = 0; volunteer < numberOfVolunteers; volunteer++) { char size1[4], size2[4]; scanf("%s %s", size1, size2); int start = sizes[size1] * numberOfTshirtsPerSize; int end = start + numberOfTshirtsPerSize; for (int tshirt = start; tshirt < end; tshirt++) { edges[tshirt].push_back(volunteer); } start = sizes[size2] * numberOfTshirtsPerSize; end = start + numberOfTshirtsPerSize; for (int tshirt = start; tshirt < end; tshirt++) { edges[tshirt].push_back(volunteer); } } MaximumCardinalityBipartiteMatching mcbm; bool canCoverAllVolunteers = mcbm.getMaximumCardinality(edges, numberOfVolunteers) == numberOfVolunteers; printf(canCoverAllVolunteers ? "YES\n" : "NO\n"); } return 0; }
Tuesday, April 21, 2015
UVa 11045 - My T-shirt suits me
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment