HDU 2767 proving equivalences (strong unicom shrinking Point)
Last Update:2015-10-09
Source: Internet
Author: User
<span id="Label3"></p>Proving equivalences<p><p><br><br></p></p>Problem Descriptionconsider The following exercise, found in a generic linear algebra Textbook.<br><br>Let A is an NXN matrix. Prove that the following statements is Equivalent:<br><br>1. A is Invertible.<br>2. Ax = b have exactly one solution for every nx1 matrix B.<br>3. Ax = b is consistent for every nx1 matrix B.<br>4. Ax = 0 have only the trivial solution x = 0.<br><br>The typical-to-solve such an exercise are to show a series of Implications. For instance, one can proceed by showing that (a) implies (b), that (b) implies (c), that (c) implies (d), and finally tha T (d) implies (a). These four implications show, the four statements is Equivalent.<br><br>Another-would be-show that (a) was equivalent to (b) (by proving, (a) implies (b) and (b) implies (a)), tha T (b) was equivalent to (c), and that (c) was equivalent to (d). however, this by-requires proving six implications, which is clearly a IoT more work than just proving four implications!<br><br>I have been given some similar tasks, and has already started proving some implications. Now I wonder, what many more implications does I have to prove? Can you help me determine this?<p><p></p></p>Inputon the first line one positive number:the number of testcases in most 100. After that per testcase:<br><br>* One line containing integers n (1≤n≤20000) and M (0≤m≤50000): the number of statements and the number of IMP Lications that has already been proved.<br>* M lines with-integers s1 and S2 (1≤s1, s2≤n and S1≠s2) each, indicating that it had been proved that statement S1 implies statement s2.<p><p></p></p>Outputper testcase:<br><br>* One line with the minimum number of additional implications, need to being proved in order to prove, all statements Is Equivalent.<p><p></p></p>Sample Input24 03 21 21 3<p><p></p></p>Sample Output42<pre><span style="color: #008080;"><span style="color: #008080;">1</span></span>#include <cstdio><span style="color: #008080;"><span style="color: #008080;">2</span></span>#include <cstring><span style="color: #008080;"><span style="color: #008080;">3</span></span>#include <algorithm><span style="color: #008080;"><span style="color: #008080;">4</span></span>#include <stack><span style="color: #008080;"><span style="color: #008080;">5</span></span>#include <vector><span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">using</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">namespace</span></span><span style="color: #000000;"><span style="color: #000000;">std;</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #008080;"><span style="color: #008080;">8</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Const</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>maxn=<span style="color: #800080;"><span style="color: #800080;">20005</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;">9</span></span>vector<<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>><span style="color: #000000;"><span style="color: #000000;">g[maxn];</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span>stack<<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>><span style="color: #000000;"><span style="color: #000000;">s;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> one</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">inch</span></span>[maxn],<span style="color: #0000ff;"><span style="color: #0000ff;"></span> out</span><span style="color: #000000;"><span style="color: #000000;">[maxn],dfn[maxn],lowlink[maxn],sccno[maxn];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">scc_cnt,dfs_clock;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">m,n;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">Init ()</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">{</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; i<=n;i++<span style="color: #000000;"><span style="color: #000000;">) g[i].clear ();</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Memset<span style="color: #0000ff;"><span style="color: #0000ff;">inch</span></span>,<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span>(<span style="color: #0000ff;"><span style="color: #0000ff;">inch</span></span><span style="color: #000000;"><span style="color: #000000;">));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>Memset<span style="color: #0000ff;"><span style="color: #0000ff;"></span> out</span>,<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span>(<span style="color: #0000ff;"><span style="color: #0000ff;"></span> out</span><span style="color: #000000;"><span style="color: #000000;">));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Memset (dfn,<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(dfn));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>Memset (lowlink,<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(lowlink));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span>Memset (sccno,<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(sccno));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> at</span>scc_cnt=dfs_clock=<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">}</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>Tarjan (<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">U)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">{</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>lowlink[u]=dfn[u]=++<span style="color: #000000;"><span style="color: #000000;">dfs_clock;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> in</span> <span style="color: #000000;"><span style="color: #000000;">S.push (u);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=<span style="color: #800080;"><span style="color: #800080;">0</span></span>; I<g[u].size (); i++<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> to</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>v=<span style="color: #000000;"><span style="color: #000000;">g[u][i];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!<span style="color: #000000;"><span style="color: #000000;">dfn[v])</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> *</span> <span style="color: #000000;"><span style="color: #000000;">Tarjan (v);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span>lowlink[u]=<span style="color: #000000;"><span style="color: #000000;">min (lowlink[u],lowlink[v]);</span></span><span style="color: #008080;"><span style="color: #008080;">Panax Notoginseng</span></span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!<span style="color: #000000;"><span style="color: #000000;">sccno[v])</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>lowlink[u]=<span style="color: #000000;"><span style="color: #000000;">min (lowlink[u],dfn[v]);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(lowlink[u]==<span style="color: #000000;"><span style="color: #000000;">dfn[u])</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>scc_cnt++<span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> while</span>(<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>x=<span style="color: #000000;"><span style="color: #000000;">s.top ();</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">S.pop ();</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>sccno[x]=<span style="color: #000000;"><span style="color: #000000;">scc_cnt;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(x==u)<span style="color: #0000ff;"><span style="color: #0000ff;"></span> break</span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;">Wuyi</span></span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">}</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> wu</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">Main ()</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">{</span></span><span style="color: #008080;"><span style="color: #008080;"></span> about</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">T;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span>scanf<span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">%d</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,&<span style="color: #000000;"><span style="color: #000000;">T);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> while</span>(t--<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>scanf<span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">%d%d</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,&n,&<span style="color: #000000;"><span style="color: #000000;">m);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #000000;"><span style="color: #000000;">Init ();</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=<span style="color: #800080;"><span style="color: #800080;">0</span></span>; i<m;i++<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">u,v;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span>scanf<span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">%d%d</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,&u,&<span style="color: #000000;"><span style="color: #000000;">v);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">G[u].push_back (v);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; i<=n;i++<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!<span style="color: #000000;"><span style="color: #000000;">dfn[i])</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">Tarjan (i);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> in</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; i<=n;i++<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>j=<span style="color: #800080;"><span style="color: #800080;">0</span></span>; J<g[i].size (); J + +<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(sccno[g[i][j]]!=<span style="color: #000000;"><span style="color: #000000;">sccno[i])</span></span><span style="color: #008080;"><span style="color: #008080;"></span> about</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">inch</span></span>[sccno[g[i][j]]]++<span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> out</span>[sccno[i]]++<span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>cnt1=<span style="color: #800080;"><span style="color: #800080;">0</span></span>, cnt2=<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; i<=scc_cnt;i++<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;">Bayi</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!<span style="color: #0000ff;"><span style="color: #0000ff;">inch</span></span><span style="color: #000000;"><span style="color: #000000;">[i])</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>cnt1++<span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!<span style="color: #0000ff;"><span style="color: #0000ff;"></span> out</span><span style="color: #000000;"><span style="color: #000000;">[i])</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>cnt2++<span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(scc_cnt==<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>Puts<span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">0</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>printf<span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">%d\n</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, Max (cnt1,cnt2));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>}</pre><p><p></p></p><p><p>HDU 2767 proving equivalences (strong unicom shrinking Point)</p></p></span>