Skip to content

Commit fcffb1a

Browse files
committed
srm 556 div 1 250 bfs
1 parent ab112fb commit fcffb1a

File tree

1 file changed

+16
-27
lines changed

1 file changed

+16
-27
lines changed

XorTravelingSalesman.cpp

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -31,39 +31,28 @@ typedef long long ll;
3131
#define fk(b) for(int k=0; k < ((int)(b)); k++) // k -> [0, b)
3232
#define fke(b) for(int k=0; k < ((int)(b)); k++) // k -> [0, b]
3333
#define fle(b) for(int l=0; l <= ((int)(b)); l++) // l -> [0, b]
34-
int n;
35-
vi visited(55, 0);
36-
vs M;
37-
void dfs(int s){
38-
fi(n){
39-
if(M[s][i] == 'Y' && !visited[i]){
40-
visited[i] = 1;
41-
dfs(i);
42-
}
43-
}
44-
}
4534

4635
class XorTravelingSalesman{
4736

4837
public:
4938
int maxProfit(vector <int> cityValues, vector <string> roads){
5039

51-
M = roads;
52-
53-
bool dp[1050] = {0};
54-
n = cityValues.size();
55-
int ret = 0;
56-
visited[0] = 1;
57-
dfs(0);
58-
59-
fj(n){
60-
if(visited[j] == 0) continue;
61-
int c = cityValues[j];
62-
dp[c] = 1;
63-
fi(1024){
64-
int k = (i^c);
65-
dp[k] |= dp[i];
66-
if(dp[k]) ret = max(ret, k);
40+
int n = cityValues.size(), ret = 0;
41+
int visited[55][1050];
42+
visited[0][cityValues[0]] = 1;
43+
queue<pi> Q;
44+
Q.push(mp(0, cityValues[0]));
45+
while(!Q.empty()){
46+
pi p = Q.front();
47+
Q.pop();
48+
int i = p.first, r = p.second;
49+
ret = max(ret, r);
50+
fj(n){
51+
if(roads[i][j] == 'N') continue;
52+
int k = r^cityValues[j];
53+
if(visited[j][k]) continue;
54+
visited[j][k] = 1;
55+
Q.push(mp(j, k));
6756
}
6857
}
6958
return ret;

0 commit comments

Comments
 (0)