河南2014 省赛 世界之威

来源:互联网 发布:非嵌入式软件即征即退 编辑:程序博客网 时间:2024/04/30 04:16

10404: E.世界之威

Time Limit: 2 Sec  Memory Limit: 128 MB
Submit: 2  Solved: 1
[Submit][Status][Web Board]

Description

某帝国拥有着N种被称作“世界之威”的新型武器。现在为了国家的经济发展,它需要很多资金,为此,此帝国总统OBM准备把一些武器卖给其它国家。

此帝国总统OBM知道,N种武器之间可能会相互受限制的。例如,第3种武器会打败第1种武器,第4种武器会打败第3种武器等等。他希望所有被卖出的武器中都至少有一种限制它的武器在他手中,目的是此帝国能制约住其它国家,这样就可以保持对世界的霸权地位。

但总统OBM头脑有点笨,他想知道他最多可以卖出多少种武器,你愿意帮助他吗?

你可以告诉电脑,但不告诉他喽。

Input

第一行: K                           表示有多少组测试数据。

接下来对每组测试数据:

1:      N               表示有多少种新型武

2~N+1行: A1 A2……AN    表示i种武器能限制住第Ai种武器

  1≤K≤10   0≤N≤106    1≤Ai≤N  

Output

对于每组测试数据,输出占一行:最多可以卖出的武器种类数

Sample Input

172 3 1 3 6 5 4

Sample Output

3
<div class="line number1 index0 alt2"><code class="c preprocessor">#include <cstdio></code></div><div class="line number2 index1 alt1"><code class="c preprocessor">#include <iostream></code></div><div class="line number3 index2 alt2"><code class="c preprocessor">#include <algorithm></code></div><div class="line number4 index3 alt1"><code class="c preprocessor">#include <queue></code></div><div class="line number5 index4 alt2"><code class="c preprocessor">#include <stack></code></div><div class="line number6 index5 alt1"><code class="c preprocessor">#include <climits></code></div><div class="line number7 index6 alt2"><code class="c preprocessor">#include <cstring></code></div><div class="line number8 index7 alt1"><code class="c preprocessor">#include <cmath></code></div><div class="line number9 index8 alt2"><code class="c preprocessor">#include <map></code></div><div class="line number10 index9 alt1"><code class="c preprocessor">#include <set></code></div><div class="line number11 index10 alt2"><code class="c preprocessor">#define INF 100000000</code></div><div class="line number12 index11 alt1"><code class="c spaces"> </code> </div><div class="line number13 index12 alt2"><code class="c keyword bold">using</code> <code class="c keyword bold">namespace</code> <code class="c plain">std;</code></div><div class="line number14 index13 alt1"><code class="c spaces"> </code> </div><div class="line number15 index14 alt2"><code class="c color1 bold">int</code> <code class="c plain">a[1000005],d[1000005],vis[1000005];</code></div><div class="line number16 index15 alt1"><code class="c spaces"> </code> </div><div class="line number17 index16 alt2"><code class="c spaces"> </code> </div><div class="line number18 index17 alt1"><code class="c spaces"> </code> </div><div class="line number19 index18 alt2"><code class="c color1 bold">int</code> <code class="c plain">main(){</code></div><div class="line number20 index19 alt1"><code class="c spaces">    </code><code class="c color1 bold">int</code> <code class="c plain">t;</code></div><div class="line number21 index20 alt2"><code class="c spaces">    </code><code class="c plain">cin >> t;</code></div><div class="line number22 index21 alt1"><code class="c spaces">    </code><code class="c keyword bold">while</code><code class="c plain">(t --){</code></div><div class="line number23 index22 alt2"><code class="c spaces">        </code><code class="c color1 bold">int</code> <code class="c plain">n;</code></div><div class="line number24 index23 alt1"><code class="c spaces">        </code><code class="c functions bold">scanf</code><code class="c plain">(</code><code class="c string">"%d"</code><code class="c plain">,&n);</code></div><div class="line number25 index24 alt2"><code class="c spaces">        </code><code class="c plain">priority_queue<</code><code class="c color1 bold">int</code><code class="c plain">,vector<</code><code class="c color1 bold">int</code><code class="c plain">>,greater<</code><code class="c color1 bold">int</code><code class="c plain">> > que;</code></div><div class="line number26 index25 alt1"><code class="c spaces">        </code><code class="c functions bold">memset</code><code class="c plain">(d,0,</code><code class="c keyword bold">sizeof</code><code class="c plain">(d));</code></div><div class="line number27 index26 alt2"><code class="c spaces">        </code><code class="c functions bold">memset</code><code class="c plain">(vis,0,</code><code class="c keyword bold">sizeof</code><code class="c plain">(vis));</code></div><div class="line number28 index27 alt1"><code class="c spaces">        </code> </div><div class="line number29 index28 alt2"><code class="c spaces">        </code><code class="c keyword bold">for</code><code class="c plain">(</code><code class="c color1 bold">int</code> <code class="c plain">i = 1;i <= n;i++){</code></div><div class="line number30 index29 alt1"><code class="c spaces">            </code><code class="c functions bold">scanf</code><code class="c plain">(</code><code class="c string">"%d"</code><code class="c plain">,&a[i]);</code></div><div class="line number31 index30 alt2"><code class="c spaces">            </code><code class="c plain">d[a[i]] ++;</code></div><div class="line number32 index31 alt1"><code class="c spaces">        </code><code class="c plain">}       </code></div><div class="line number33 index32 alt2"><code class="c spaces">         </code> </div><div class="line number34 index33 alt1"><code class="c spaces">        </code><code class="c keyword bold">for</code><code class="c plain">(</code><code class="c color1 bold">int</code> <code class="c plain">i = 1;i <= n;i++){</code></div><div class="line number35 index34 alt2"><code class="c spaces">            </code><code class="c keyword bold">if</code><code class="c plain">(d[i] == 0){</code></div><div class="line number36 index35 alt1"><code class="c spaces">                </code><code class="c plain">que.push(i);    </code></div><div class="line number37 index36 alt2"><code class="c spaces">            </code><code class="c plain">}</code></div><div class="line number38 index37 alt1"><code class="c spaces">        </code><code class="c plain">}</code></div><div class="line number39 index38 alt2"><code class="c spaces">        </code> </div><div class="line number40 index39 alt1"><code class="c spaces">        </code><code class="c color1 bold">int</code> <code class="c plain">ans = 0;</code></div><div class="line number41 index40 alt2"><code class="c spaces">          </code> </div><div class="line number42 index41 alt1"><code class="c spaces">        </code><code class="c keyword bold">while</code><code class="c plain">(!que.empty()){</code></div><div class="line number43 index42 alt2"><code class="c spaces">            </code><code class="c color1 bold">int</code> <code class="c plain">p = que.top();</code><code class="c comments">//入度为零的 </code></div><div class="line number44 index43 alt1"><code class="c spaces">            </code><code class="c plain">que.pop();</code></div><div class="line number45 index44 alt2"><code class="c spaces">            </code><code class="c color1 bold">int</code> <code class="c color1 bold">tm</code> <code class="c plain">= 0;</code></div><div class="line number46 index45 alt1"><code class="c spaces">            </code><code class="c keyword bold">while</code><code class="c plain">(!vis[p]){</code></div><div class="line number47 index46 alt2"><code class="c spaces">                </code><code class="c plain">vis[p] = 1;</code></div><div class="line number48 index47 alt1"><code class="c spaces">                </code><code class="c plain">p = a[p];</code></div><div class="line number49 index48 alt2"><code class="c spaces">                </code><code class="c color1 bold">tm</code><code class="c plain">++;</code></div><div class="line number50 index49 alt1"><code class="c spaces">            </code><code class="c plain">}</code></div><div class="line number51 index50 alt2"><code class="c spaces">            </code><code class="c plain">ans += </code><code class="c color1 bold">tm</code><code class="c plain">/2; </code></div><div class="line number52 index51 alt1"><code class="c spaces">        </code><code class="c plain">}</code></div><div class="line number53 index52 alt2"><code class="c spaces">     </code> </div><div class="line number54 index53 alt1"><code class="c spaces">        </code><code class="c keyword bold">for</code><code class="c plain">(</code><code class="c color1 bold">int</code> <code class="c plain">i = 1;i <= n;i++){</code></div><div class="line number55 index54 alt2"><code class="c spaces">            </code><code class="c keyword bold">if</code><code class="c plain">(!vis[i]){</code></div><div class="line number56 index55 alt1"><code class="c spaces">                </code><code class="c color1 bold">int</code> <code class="c plain">p = i;</code></div><div class="line number57 index56 alt2"><code class="c spaces">                </code><code class="c color1 bold">int</code> <code class="c color1 bold">tm</code> <code class="c plain">= 0;</code></div><div class="line number58 index57 alt1"><code class="c spaces">                </code><code class="c keyword bold">while</code><code class="c plain">(!vis[p]){</code></div><div class="line number59 index58 alt2"><code class="c spaces">                    </code><code class="c plain">vis[p] = 1;</code></div><div class="line number60 index59 alt1"><code class="c spaces">                    </code><code class="c plain">p = a[p];</code></div><div class="line number61 index60 alt2"><code class="c spaces">                    </code><code class="c color1 bold">tm</code><code class="c plain">++;</code></div><div class="line number62 index61 alt1"><code class="c spaces">                </code><code class="c plain">}   </code></div><div class="line number63 index62 alt2"><code class="c spaces">                </code><code class="c plain">ans += </code><code class="c color1 bold">tm</code><code class="c plain">/2;</code></div><div class="line number64 index63 alt1"><code class="c spaces">            </code><code class="c plain">}           </code></div><div class="line number65 index64 alt2"><code class="c spaces">        </code><code class="c plain">} </code></div><div class="line number66 index65 alt1"><code class="c spaces">        </code><code class="c functions bold">printf</code><code class="c plain">(</code><code class="c string">"%d\n"</code><code class="c plain">,ans);</code></div><div class="line number67 index66 alt2"><code class="c spaces">    </code><code class="c plain">} </code></div><div class="line number68 index67 alt1"><code class="c spaces">    </code><code class="c keyword bold">return</code> <code class="c plain">0;</code></div><div class="line number69 index68 alt2"><code class="c plain">}</code></div>


0 0
原创粉丝点击