You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br><spanclass="line">8</span><br><spanclass="line">9</span><br><spanclass="line">10</span><br><spanclass="line">11</span><br><spanclass="line">12</span><br><spanclass="line">13</span><br><spanclass="line">14</span><br><spanclass="line">15</span><br><spanclass="line">16</span><br><spanclass="line">17</span><br><spanclass="line">18</span><br><spanclass="line">19</span><br><spanclass="line">20</span><br><spanclass="line">21</span><br><spanclass="line">22</span><br><spanclass="line">23</span><br><spanclass="line">24</span><br><spanclass="line">25</span><br><spanclass="line">26</span><br><spanclass="line">27</span><br><spanclass="line">28</span><br><spanclass="line">29</span><br><spanclass="line">30</span><br><spanclass="line">31</span><br><spanclass="line">32</span><br><spanclass="line">33</span><br><spanclass="line">34</span><br><spanclass="line">35</span><br><spanclass="line">36</span><br><spanclass="line">37</span><br><spanclass="line">38</span><br><spanclass="line">39</span><br><spanclass="line">40</span><br><spanclass="line">41</span><br><spanclass="line">42</span><br><spanclass="line">43</span><br><spanclass="line">44</span><br><spanclass="line">45</span><br><spanclass="line">46</span><br><spanclass="line">47</span><br><spanclass="line">48</span><br><spanclass="line">49</span><br><spanclass="line">50</span><br><spanclass="line">51</span><br><spanclass="line">52</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">include</span><spanclass="meta-string"><bits/stdc++.h></span></span></span><br><spanclass="line"><spanclass="keyword">using</span><spanclass="keyword">namespace</span><spanclass="built_in">std</span>;</span><br><spanclass="line"><spanclass="keyword">const</span><spanclass="keyword">int</span> maxn = <spanclass="number">1000</span> + <spanclass="number">10</span>;</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="built_in">vector</span><<spanclass="keyword">int</span>>g[maxn];</span><br><spanclass="line"><spanclass="keyword">int</span> N, L;</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">int</span><spanclass="title">bfs</span><spanclass="params">(<spanclass="keyword">int</span> u)</span></span>{</span><br><spanclass="line"><spanclass="keyword">int</span> ans = <spanclass="number">0</span>, level[N + <spanclass="number">1</span>] = {<spanclass="number">0</span>}; <spanclass="comment">//level表示用户转发时所处的转发层数</span></span><br><spanclass="line"><spanclass="keyword">bool</span> vis[N + <spanclass="number">1</span>] = {<spanclass="literal">false</span>};</span><br><spanclass="line"><spanclass="built_in">queue</span><<spanclass="keyword">int</span>>q;</span><br><spanclass="line"> q.push(u);</span><br><spanclass="line"> vis[u] = <spanclass="literal">true</span>;</span><br><spanclass="line"><spanclass="keyword">while</span> (!q.empty()) {</span><br><spanclass="line"><spanclass="keyword">int</span> t = q.front();</span><br><spanclass="line"> q.pop();</span><br><spanclass="line"><spanclass="keyword">for</span> (<spanclass="keyword">auto</span> i : g[t]) {</span><br><spanclass="line"><spanclass="keyword">if</span> (!vis[i] && level[t] < L) {</span><br><spanclass="line"> ans++;</span><br><spanclass="line"> level[i] = level[t] + <spanclass="number">1</span>;</span><br><spanclass="line"> vis[i] = <spanclass="literal">true</span>;</span><br><spanclass="line"> q.push(i);</span><br><spanclass="line"> }</span><br><spanclass="line"> }</span><br><spanclass="line"> }</span><br><spanclass="line"><spanclass="keyword">return</span> ans;</span><br><spanclass="line">}</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">void</span><spanclass="title">addEdgr</span><spanclass="params">(<spanclass="keyword">int</span> u, <spanclass="keyword">int</span> v)</span></span>{</span><br><spanclass="line"> g[u].push_back(v);</span><br><spanclass="line">}</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">int</span><spanclass="title">main</span><spanclass="params">(<spanclass="keyword">int</span> argc, <spanclass="keyword">char</span><spanclass="keyword">const</span> *argv[])</span></span></span><br><spanclass="line"><spanclass="function"></span>{</span><br><spanclass="line"><spanclass="built_in">cin</span> >> N >> L;</span><br><spanclass="line"><spanclass="keyword">for</span> (<spanclass="keyword">int</span> u = <spanclass="number">1</span>; u <= N; ++u) {</span><br><spanclass="line"><spanclass="keyword">int</span> M, v;</span><br><spanclass="line"><spanclass="built_in">cin</span> >> M;</span><br><spanclass="line"><spanclass="keyword">for</span> (<spanclass="keyword">int</span> j = <spanclass="number">0</span>; j < M; ++j) {</span><br><spanclass="line"><spanclass="built_in">cin</span> >> v;</span><br><spanclass="line"> addEdgr(v, u);</span><br><spanclass="line"> }</span><br><spanclass="line"> }</span><br><spanclass="line"><spanclass="keyword">int</span> K, id;</span><br><spanclass="line"><spanclass="built_in">cin</span> >> K;</span><br><spanclass="line"><spanclass="keyword">for</span> (<spanclass="keyword">int</span> i = <spanclass="number">0</span>; i < K; ++i) {</span><br><spanclass="line"><spanclass="built_in">cin</span> >> id;</span><br><spanclass="line"><spanclass="built_in">cout</span> << bfs(id) << <spanclass="built_in">endl</span>;</span><br><spanclass="line"></span><br><spanclass="line"> }</span><br><spanclass="line"><spanclass="keyword">return</span><spanclass="number">0</span>;</span><br><spanclass="line">}</span><br></pre></td></tr></table></figure>
204
204
205
205
<h3id="深度优先遍历"><ahref="#深度优先遍历" class="headerlink" title="深度优先遍历"></a>深度优先遍历</h3><p>这道题使用深度优先遍历比使用广度优先遍历要复杂一些,原因在于对于一个在第 i 层访问到的用户来说,如果此时达到转发层数上限,就无法继续遍历了,然而如果该用户可以通过另一条更短的途径访问到,就可以继续深度遍历。比如样例输入:</p>
0 commit comments