目录
- PAT 1076 Forwards on Weibo
- AcWing 847. 图中点的层次
PAT 1076 Forwards on Weibo
- 注意控制深度,并且避免影响以查找过的点的深度,也要进行visited判断
- 测试点4一直报段错误,改变容量至1e5,通过。。。
- 下次考虑用vector
const int N = 1e5 + 10;
int h[N], e[N], ne[N], d[N], n, l, k, idx = 0;
bool visited[N];
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
int bfs(int u)
{
int ret = -1, layer = 0;
queue<int> m_next;
m_next.push(u);
visited[u] = true;
d[u] = 0;
while(!m_next.empty())
{
int cur = m_next.front();
m_next.pop();
if(d[cur] > l)
break;
ret++;
for(int i = h[cur]; i != -1; i = ne[i])
{
int j = e[i];
if(visited[j] == false )
{
d[j] = d[cur] + 1;
m_next.push(j);
visited[j] = true;
}
}
}
return ret;
}
int main()
{
memset(h, -1, sizeof(h));
cin >> n >> l;
for(int i = 1; i <= n; ++i)
{
int nfollow, up;
cin >> nfollow;
while(nfollow--)
{
cin >> up;
add(up, i);
}
}
cin >> k;
int qry;
while(k--)
{
cin >> qry;
cout << bfs(qry) << endl;
memset(visited, false, sizeof(visited));
memset(d, 0, sizeof(d));
}
return 0;
}
AcWing 847. 图中点的层次
const int N = 1e5 + 10;
int h[N], e[N], ne[N], n, m, idx = 0, d[N];
bool visited[N];
queue<int> m_next;
void add(int a, int b)
{
e[idx] = b;ne[idx] = h[a];h[a] = idx++;
}
int bfs()
{
memset(d, -1, sizeof(d));
m_next.push(1);
d[1] = 0;
while(m_next.size())
{
int cur = m_next.front();
m_next.pop();
for(int i = h[cur]; i != -1; i = ne[i])
{
int j = e[i];
if(d[j] == -1)
{
m_next.push(j);
d[j] = d[cur] + 1;
}
}
}
return d[n];
}
int main()
{
memset(h, -1, sizeof(h));
cin >> n >> m;
int a, b;
for(int i = 0; i < m; ++i)
{
cin >> a >> b;
add(a, b);
}
cout << bfs();
return 0;
}