探索
const int N = 50 + 1;
const int V = 1024 * 2;
bool vis[N][V];
vector<string> G;
vector<int> city;
void rec(int node, int value)
{
if (vis[node][value]) return ;
vis[node][value] = true;
for (int i = 0; i < G[node].size(); ++i) {
if (G[node][i] == 'Y') rec(i, value ^ city[i]);
}
return ;
}
class XorTravelingSalesman {
public:
int maxProfit(vector <int> cityValues, vector <string> roads)
{
city = cityValues;
G = roads;
fill(&vis[0][0], &vis[N - 1][V - 1] + 1, false);
rec(0, cityValues[0]);
int mx = cityValues[0];;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < V; ++j) {
if (vis[i][j]) mx = max(mx, j);
}
}
return mx;
}
};