class Solution {
public:
int RED = 0;
int BLUE = 1;
vector<vector<pair<int, int>>> graph;

vector<int> shortestAlternatingPaths(int n, vector<vector<int>>& redEdges, vector<vector<int>>& blueEdges) {
graph.clear();
graph.resize(n);
for(auto& v: redEdges) {
graph[v[0]].emplace_back(RED, v[1]);
}
for(auto& v: blueEdges) {
graph[v[0]].emplace_back(BLUE, v[1]);
}

// color, current node
queue<pair<int,int>> q;
vector<vector<int>> distance(2, vector<int>(n, 1e9));
distance[BLUE][0] = distance[RED][0] = 0;
q.push({RED, 0});
q.push({BLUE, 0});

while(!q.empty()) {
auto [color, idx] = q.front();
q.pop();
int dist = distance[color][idx];

for(int i = 0 ; i < graph[idx].size(); i++) {
auto [ncolor, nidx] = graph[idx][i];
if(ncolor != color && distance[ncolor][nidx] == 1e9) {
distance[ncolor][nidx] = dist + 1;
q.push({ncolor, nidx});
}
}
}

vector<int> ret = distance[RED];
for(int i = 0; i < n; i++) {
ret[i] = min(ret[i], distance[BLUE][i]);
if(ret[i] == 1e9) {
ret[i] = -1;
}
}

return ret;
}
};


잊어먹고 있다가

자고 일어나서 품..