描述:
小Ho身处的迷宫一共有N个房间,编号1~N。房间之间一共有M条通道相连,其中第i条通道连接的2个房间编号是Ai和Bi。
不过有些通道一开始是封闭的,必须从其他房间拿到钥匙才能通过。
小Ho一开始处于1号房间,请你计算他最多能到达迷宫中的多少个房间。
分析:
搜到一条边时,如果钥匙没有拿到,保存该钥匙能到达的点,下次走到钥匙点,再来走钥匙能到达的点
代码:
#include <queue>
#include <vector>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5+55;
int vis[N];
struct node
{
int b;
int c;
node(int x,int y){b = x;c = y;}
};
vector<node> v[N];
vector<int> vv[N];
int ans;
void bfs()
{
queue<int> p;
p.push(1);
vis[0]=1;
while(!p.empty())
{
int e = p.front();p.pop();
if(vis[e]) continue;
vis[e]=1;ans++;
for(int i=0;i<vv[e].size();++i)
{
if(!vis[vv[e][i]])