// 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