﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-ArcTan-文章分类-ACM-图论</title><link>http://www.cppblog.com/ArcTan/category/19278.html</link><description>dfs</description><language>zh-cn</language><lastBuildDate>Thu, 01 Nov 2012 14:41:53 GMT</lastBuildDate><pubDate>Thu, 01 Nov 2012 14:41:53 GMT</pubDate><ttl>60</ttl><item><title>POJ 2762-Tarjan + 拓扑排序</title><link>http://www.cppblog.com/ArcTan/articles/193425.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Wed, 17 Oct 2012 09:22:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/193425.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/193425.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/193425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/193425.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/193425.html</trackback:ping><description><![CDATA[题意：给定无向图，判断是否任何两点（x,y），可以从x到y或者从y到x.<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The son can either go from x to y, or from y to x.</div><br />思路：Tarjan缩点后，充要条件是，成一条链。拓扑排序求判断之。<br /><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;1010</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxm&nbsp;60600</span><span style="color: #000000; "><br /><br /><br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;edge{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;next;<br />}edges[maxm];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;last[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;edge_cnt;<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;add_edge(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;u,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;v)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;edges[edge_cnt].v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;edges[edge_cnt].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;last[u];<br />&nbsp;&nbsp;&nbsp;&nbsp;last[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge_cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /><br /><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;dfn[maxn],low[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;color[maxn];<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;instack[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;st[maxn],top;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt,scnt;<br /><br /><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;N;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mat[maxn][maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;topo[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;dg[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;path[maxn];<br /><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;min(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;x</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">y</span><span style="color: #000000; ">?</span><span style="color: #000000; ">x:y;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;tarjan(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;u)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;dfn[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">low[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[</span><span style="color: #000000; ">++</span><span style="color: #000000; ">top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">u;<br />&nbsp;&nbsp;&nbsp;&nbsp;instack[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">last[u];j</span><span style="color: #000000; ">!=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">edges[j].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edges[j].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(dfn[v]</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tarjan(v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">min(low[u],low[v]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(instack[v])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">min(low[u],low[v]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(low[u]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">dfn[u])<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">st[top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instack[x]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color[x]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">scnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">u);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;solve()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;scnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(dfn,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(dfn));&nbsp; //初始这里居然错了。<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(instack,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(instack));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(dfn[i]</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tarjan(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /><br /><br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(last,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(last));<br />&nbsp;&nbsp;&nbsp;&nbsp;edge_cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">m;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;u,v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">u,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_edge(u,v);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;work()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;solve();<br />&nbsp;&nbsp;&nbsp;&nbsp;N&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;scnt;</span><span style="color: #008000; ">//求出的强连通数<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;memset(mat,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(mat));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">last[i];j</span><span style="color: #000000; ">!=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">edges[j].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edges[j].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mat[color[i]][color[v]]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /><br /><br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;topsort()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(dg,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(dg));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">N;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">N;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">j)//注意自己到自己不可。当是就在这里WA了！<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dg[i]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;mat[j][i];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;k</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;k</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">N;k</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(dg[i]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n)&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">n)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dg[i]</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">N;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dg[j]</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">mat[i][j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path[k]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cas;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">cas);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(cas</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;work();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;flag&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;topsort();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">N;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">mat[path[i]][path[i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(flag)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Yes</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">No</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br /><br />3&nbsp;3<br />1&nbsp;2<br />2&nbsp;3<br />3&nbsp;1<br /><br />8&nbsp;11<br />1&nbsp;2<br />2&nbsp;3<br />2&nbsp;5<br />2&nbsp;6<br />3&nbsp;5<br />4&nbsp;3<br />5&nbsp;2<br />5&nbsp;4<br />6&nbsp;7<br />6&nbsp;8<br />7&nbsp;6<br /><br /></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span></div><br /><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/193425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-10-17 17:22 <a href="http://www.cppblog.com/ArcTan/articles/193425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tarjan算法求图的强连通 模版</title><link>http://www.cppblog.com/ArcTan/articles/193361.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Tue, 16 Oct 2012 04:14:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/193361.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/193361.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/193361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/193361.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/193361.html</trackback:ping><description><![CDATA[边的储存<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;edge<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;next;<br />}&nbsp;edges[maxn</span><span style="color: #000000; ">*</span><span style="color: #000000; ">maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;last[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tot;<br /><br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;add(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;u,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;v)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;edges[tot].v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v;<br />&nbsp;&nbsp;&nbsp;&nbsp;edges[tot].next&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;last[u];<br />&nbsp;&nbsp;&nbsp;&nbsp;last[u]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tot</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000;">&nbsp;;<br />}<br /><br /><div>int dfn[maxn],low[maxn];&nbsp; //时间戳 最早能回溯到的祖先位置。<br />int color[maxn];&nbsp; //所属连通分量编号<br />bool instack[maxn];&nbsp; <br />int st[maxn],top;&nbsp; //模拟栈<br />int cnt,scnt;&nbsp; //时间和连通分量计数<br /></div></span></div><br /><br />Tarjan算法部分：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;tarjan(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;u)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;dfn[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">low[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;st[</span><span style="color: #000000; ">++</span><span style="color: #000000; ">top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">u;<br />&nbsp;&nbsp;&nbsp;&nbsp;instack[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">last[u];j</span><span style="color: #000000; ">!=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">edges[j].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;v&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edges[j].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(dfn[v]</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tarjan(v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">min(low[u],low[v]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(instack[v])&nbsp;low[u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">min(low[u],dfn[v]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(dfn[u]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">low[u]) //以u为根节点的树形成一个连通分量<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">st[top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instack[x]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color[x]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">scnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">u);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">; <br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}</span></div><br /><br />solv()函数部分：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;solve()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;scnt</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(dfn,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(dfn));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(instack,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(instack));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">n</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(dfn[i]</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tarjan(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}</span></div><br /><br /><div><br /><br />2&#8212;SAT中判断是否形成自环check()</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;check()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">n;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(color[i]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">color[i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">n])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}</span></div><br /><br /><br />求出连通分量的解。待定。<img src ="http://www.cppblog.com/ArcTan/aggbug/193361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-10-16 12:14 <a href="http://www.cppblog.com/ArcTan/articles/193361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>连通图--顶点连通度的求解 POJ 1966</title><link>http://www.cppblog.com/ArcTan/articles/184198.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Thu, 19 Jul 2012 09:09:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/184198.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/184198.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/184198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/184198.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/184198.html</trackback:ping><description><![CDATA[有向图G中求顶点连通度：<br />&nbsp;&nbsp; &nbsp;&nbsp; 1、独立轨P(A,B)<br />&nbsp;&nbsp; &nbsp;&nbsp; 2、Menger定理：无向图G的顶点连通度<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; k(G)=V|G|-1 G是完全图，min &lt;A,B&gt;! in E（P（A，B））else<br />&nbsp;&nbsp; &nbsp;&nbsp; 3、用最大流法求P（A，B）。<br />&nbsp;&nbsp; &nbsp;&nbsp; 4、建图：e=(u,v)分成e'=(u'',v')和e''=(u',v'');e'=e''=inf。<br />&nbsp;&nbsp; &nbsp;&nbsp; <br /><br />得好好研究研究这些图论的原理，搞明白。《图论》这本书，讲得不行啊！！！！还是得好好学习《算法导论》<br /><br />最大流，好要好好学！<br /><div><table width="100%" border="1" cellpadding="0" cellspacing="0"><tbody><tr align="center"><td>10485949</td><td><a href="http://poj.org/userstatus?user_id=wangsouc">wangsouc</a></td><td><a href="http://poj.org/problem?id=1966">1966</a></td><td>Accepted</td><td>248K</td><td>16MS</td><td><a href="http://poj.org/showsource?solution_id=10485949" target="_blank">C++</a></td><td>1967B</td><td>2012-07-19 17:00:20</td></tr></tbody></table></div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;105</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;inf&nbsp;105</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;min(x,y)&nbsp;(x&lt;y?x:y)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;max(x,y)&nbsp;(x&gt;y?x:y)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;map[maxn][maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;N,M;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;max_flow(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;num,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;map[][maxn],</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;source,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sink)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;que[maxn],head,tail;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pre[maxn],min_flow[maxn];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;flow[maxn][maxn];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(flow,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(flow));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;tail</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">source;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(pre,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(pre));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min_flow[source]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[source]</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(head</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">tail)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;temp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">que[</span><span style="color: #000000; ">++</span><span style="color: #000000; ">head];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">num;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(pre[i]</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;flow[temp][i]</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">map[temp][i])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[</span><span style="color: #000000; ">++</span><span style="color: #000000; ">tail]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min_flow[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">min(min_flow[temp],(map[temp][i]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">flow[temp][i]));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(pre[sink]</span><span style="color: #000000; ">!=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;k</span><span style="color: #000000; ">=</span><span style="color: #000000; ">sink;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(pre[k]</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow[pre[k]][k]</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">min_flow[sink];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow[k][pre[k]]</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">flow[pre[k]][k];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pre[k];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(pre[sink]</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">min_flow[sink];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">N,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">M)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;u,v,ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(map,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(map));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">N;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[i][i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">N]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">M;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;(%d,%d)</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">u,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[u</span><span style="color: #000000; ">+</span><span style="color: #000000; ">N][v]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">map[v</span><span style="color: #000000; ">+</span><span style="color: #000000; ">N][u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">N;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">min(ans,max_flow(N</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,map,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">+</span><span style="color: #000000;">N,i));</span>&nbsp;&nbsp; //这里没有搞明白怎么是&lt;N , i&gt;呢？？？<br /><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">==</span><span style="color: #000000; ">inf)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">N;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></div><br />图论。<br /><br /><br /><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/184198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-07-19 17:09 <a href="http://www.cppblog.com/ArcTan/articles/184198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tarjan算法-求无向连通图的关节点</title><link>http://www.cppblog.com/ArcTan/articles/184124.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Wed, 18 Jul 2012 13:36:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/184124.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/184124.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/184124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/184124.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/184124.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 无向连通图的关节点：&nbsp;&nbsp; &nbsp;&nbsp; 1、朴素算法：枚举+DFS，O(N^3)。&nbsp;&nbsp; &nbsp;&nbsp; 2、Robert Tarjan的Tarjan算法。O(N^2)　　Tarjan算法是基于对图深度优先搜索的算法，每个强连通分量为搜索树中的一棵子树。搜索时，把当前搜索树中未处理的节点加入一个堆栈，回溯时可以判断栈顶到栈中的节点是否为一...&nbsp;&nbsp;<a href='http://www.cppblog.com/ArcTan/articles/184124.html'>阅读全文</a><img src ="http://www.cppblog.com/ArcTan/aggbug/184124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-07-18 21:36 <a href="http://www.cppblog.com/ArcTan/articles/184124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Havel_Hakimi定理（可图性判定）-poj1659</title><link>http://www.cppblog.com/ArcTan/articles/182090.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Sat, 07 Jul 2012 09:45:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/182090.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/182090.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/182090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/182090.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/182090.html</trackback:ping><description><![CDATA[度序列（Degree Sequence）：把图G所有顶点的度数排成一个序列s，则称s为图G的度序列。如<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s:2，5，4，3，3，1 或者 s1:1,2,3,4,5 或者 s2:5,4,3,2,1<br /><br />可图的（Graphic）：一个非负整数组成的有限序列如果是某个无向图的度序列，则称该序列是Graphic！<br /><br />Havel-Hakimi定理（贪心）：<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由非负数组成的非增序列s:d1,d2,d3....dn（n&gt;=2,d1&gt;=1）是Graphic，当且仅当序列<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s1:d2-1,d3-1,...,d(d1+1)-1,d(d1+2),....,dn 是Graphic！<br /><br />应用：poj1659：<br /><div><img src="data:image/png;base64,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" alt="" /></div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;vertex<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;deg;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;index;<br />}&nbsp;ver[</span><span style="color: #000000; ">12</span><span style="color: #000000; ">];<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;adj[</span><span style="color: #000000; ">12</span><span style="color: #000000; ">][</span><span style="color: #000000; ">12</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n;<br /><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cmp(vertex&nbsp;v1,vertex&nbsp;v2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;v1.deg</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">v2.deg;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;Havel_Hak()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,j,u,v,m;<br />&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">n)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(ver</span><span style="color: #000000; ">+</span><span style="color: #000000; ">i,ver</span><span style="color: #000000; ">+</span><span style="color: #000000; ">n</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,cmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="color: #000000; ">=</span><span style="color: #000000; ">ver[i].deg;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u</span><span style="color: #000000; ">=</span><span style="color: #000000; ">ver[i].index;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">m</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">n)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(j</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">m)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ver[j].deg</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ver[j].deg</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v</span><span style="color: #000000; ">=</span><span style="color: #000000; ">ver[j].index;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adj[u][v]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">adj[v][u]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;print(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;flag)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,j;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">flag)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">NO\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">YES\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">n;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,adj[i][j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,adj[i][j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;t,i;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">t);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(t</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ver[i].deg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ver[i].index</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(adj,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(adj));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(Havel_Hak());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(t</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000;">;<br />}<br /></span></div><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/182090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-07-07 17:45 <a href="http://www.cppblog.com/ArcTan/articles/182090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>匈牙利算法-二分图的最大匹配</title><link>http://www.cppblog.com/ArcTan/articles/181673.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Fri, 06 Jul 2012 04:29:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/181673.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/181673.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/181673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/181673.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/181673.html</trackback:ping><description><![CDATA[<div><span style="font-size: 14pt;"><p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="color: #000000; font-size: 12pt; font-family: '宋体';"><span style="font-weight: bold; font-size: 18pt;">二分图最大匹配的匈牙利算法：&nbsp; </span></span></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 12pt; font-family: '宋体';">&nbsp;&nbsp; 二分图是这样一个图，它的顶点可以分类两个集合X和Y，所有的边关联在两个顶点中，恰好一个属于集合Ｘ，另一个属于集合Ｙ。&nbsp;</span></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="color: #ff0000; font-size: 12pt; font-family: '宋体';">最大匹配：&nbsp;</span><span style="font-size: 12pt; font-family: '宋体';">图中包含边数最多的匹配称为图的最大匹配。&nbsp;&nbsp;</span></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="color: #ff0000; font-size: 12pt; font-family: '宋体';">完美匹配：&nbsp;</span><span style="font-size: 12pt; font-family: '宋体';">如果所有点都在匹配边上，称这个最大匹配是完美匹配。&nbsp;</span></p> <p style="margin-left: 72pt; text-indent: -72pt; margin-bottom: 0pt; margin-top: 0pt;"><span style="color: #ff0000; font-size: 12pt; font-family: '宋体';">最小覆盖：</span><span style="font-size: 12pt; font-family: '宋体';">&nbsp;最小覆盖要求用最少的点（Ｘ集合或Ｙ集合的都行）让每条边都至少和其中一个点关联。可以证明：最少的点（即覆盖数）＝最大匹配数&nbsp;</span></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="color: #ff0000; font-size: 12pt; font-family: '宋体';">最小路径覆盖：&nbsp;</span></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 12pt; font-family: '宋体';">用尽量少的不相交简单路径覆盖有向无环图Ｇ的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个：Ｘ结点集中的i和Y结点集中的i',如果有边i-&gt;j，则在二分图中引入边i-&gt;j'，设二分图最大匹配为m,则结果就是n-m。 <br /></span></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 12pt; font-family: '宋体';"><br /></span></p> </span> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 18pt; font-family: '宋体';">二分图最大匹配的经典匈牙利算法是由Edmonds在1965年提出的，</span><span style="color: #ff0000; font-size: 12pt; font-family: '宋体';">算法的核心就是根据一个初始匹配不停的找增广路，直到没有增广路为止。</span></p> <p style="text-indent: 24pt; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 12pt; font-family: '宋体';">匈牙利算法的本质实际上和基于增广路特性的最大流算法还是相似的，只需要注意两点：</span></p> <p style="margin-left: 60pt; text-indent: -36pt; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 12pt; font-family: '宋体';">（一）每个X节点都最多做一次增广路的起点；</span></p> <p style="margin-left: 24pt; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 12pt; font-family: '宋体';">（二）如果一个Y节点已经匹配了，那么增广路到这儿的时候唯一的路径是走到Y节点的匹配点（可以回忆最大流算法中的后向边，这个时候后向边是可以增流的）。</span></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 12pt; font-family: '宋体';">&nbsp;&nbsp;&nbsp;&nbsp;找增广路的时候既可以采用dfs也可以采用bfs，两者都可以保证O(nm)的复杂度，因为每找一条增广路的复杂度是O(m)，而最多增广n次，dfs在实际实现中更加简短。</span></p> <span style="font-size: 14pt;"> <p style="margin-bottom: 0pt; margin-top: 0pt;"><br /></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 18pt; font-family: '宋体'; font-weight: bold;">算法思想：&nbsp;</span></p> <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 12pt; font-family: '宋体';">算 法的思路是不停的找增广轨,&nbsp;并增加匹配的个数,增广轨顾名思义是指一条可以使匹配数变多的路径,在匹配问题中,增广轨的表现形式是一条"交错轨",也就 是说这条由图的边组成的路径,&nbsp;它的第一条边是目前还没有参与匹配的,第二条边参与了匹配,第三条边没有..最后一条边没有参与匹配,并且始点和终点还没 有被选择过.这样交错进行,显然&nbsp;他有奇数条边.那么对于这样一条路径,我们可以将第一条边改为已匹配,第二条边改为未匹配...以此类推.也就是将所有 的边进行"反色",容易发现这样修&nbsp;改以后,匹配仍然是合法的,但是匹配数增加了一对.另外,单独的一条连接两个未匹配点的边显然也是交错轨.可以证明, 当不能再找到增广轨时,就得到了一个&nbsp;最大匹配.这也就是匈牙利算法的思路.、</span></p></span></div><br /><br />C邻接矩阵：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;result[</span><span style="color: #000000; ">105</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;state[</span><span style="color: #000000; ">105</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;data[</span><span style="color: #000000; ">105</span><span style="color: #000000; ">][</span><span style="color: #000000; ">105</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n1,n2,m,ans;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(result,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(result));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(data,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(data));<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n1,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n2,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">m&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[x][y]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;find(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n2&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(data[x][i]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">state[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(result[i]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;find(result[i]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n1&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(state,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(state));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(find(i))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000;">;<br />}<br /></span></div><br /><br />POJ_1274:<br /><div><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABO8AAAAbCAIAAACryDxjAAAV3ElEQVR4nO1dy47jSHblR+S4fqGgkd3w5LrsZW0LMBsYD9CwkahfSAPq0WbQi0J70Ln1QnBpZdj77oQNGd0aw3C2MV660S6J1CPFp1750vvF60VQwRvBIKVMKSVKGYGDRFWIDJKHcePGiRsRVMo2xCOjnirLpGYvaf5V8fJEURRFSasXy8xSmh6qvMoVXVxOLnsm/Ckqv2xDRn3L5bBXZ44v5C+W5ZwWRKdolqebM92c6eZENydVe1J3Z0bbs27AvYdWD9p96AyhM4RW33MfPPtuXrPHVWukG0Ot0deNYcUcAkDNHmuNQcUc1p2p2V44N9C8g9Y9NO+h04fWgEezH4lODzo9aN2Dewt2F6yOZ7QWRmtetcYVc6gbQ90YkL8Vc/THH+Z/+bnXaE/Nrmffes0H+OevQFF8/NmvwbqBRnted2ff5z2an1YRAw5oDnz+S/8nNYv5hBMlKK3g8x/khEtTU3w5hbz4SIJ09E87A8BzlZxWeK4yeYZDYZ2k55KDY8o5LDYkKLBR5IpBPn7RJB+bG33pwsxcNsgk1kfs950qMDFip9RI8XULoZs5z66oq0eArTiCqjXe3BEAPMURVK3RdWuGHUG7D50BdAbQ6oF7Tx3Bz8Qdp//q95rlIQZ8N53+/ALTQh0650ORY2V+xR0D0gfgjsS9ha1j222XoOuCH+ckdXYVIkr0gOFyXDX1iisklz3L5Eshxk4LNnzIfn0lOiWpvD0KwXPhanMoeGbqGHJI9SjbwNYo/ldcf5aZ4uNFVry7V5DMnkasI3B/86evOK5+/btvl46grqb+RFEURfnz75EjKOZ/Tw/+Rfrsp3vo9AXl/OaryyhF8C9f+Wrod/9UYh3B//5F6m/+e5Uj+Pl/Ln+hKIqifPbXF8gRzL4PbowRR0QR6C6URUKP9Qgk+W0j+UnNXoaNmp4epRzJKcuWDVdXsXAr5C+ifuKg7L1K7RJVCyom6MZCNxa6OatY06o9qzlT+3bZjxlAewCtvtfsLdyHOelbGK153ZlUrZFuDABAa/R1Y6Abg6o1qtnjujOpO5Nrd3rtTq0uGDdg3oJ5C9ZdAPteAPcOzPbCaM0bzdm1O607E2IqFBVzSC9x7U4bzYlzB+49kO4LQasHzQewumC0vbq70M2JZkw1Y1qx5rqz0MMGvKy7LxPJbFUlGxIbgqjZ5xv4ODJs7gi0Rn9zRwAgHcETIdsuyZuk7lCQWOoS4gikItgKXqKarZigGwQLMjBz3Zw32lOzO7fv5u7DvNlbNHvzZm9xN4KbAbQfwLnxzPbs2h0DQMXsX7vjujOq2cOqNUAY6eZIN0cVa0xQtScENWcqRNUakXNr9hCj7oyu3XGjOTHbM6szt7sL58Zzb6H5AK0+tAfQGUK7D+492LdgduC66dWcecWaa8ZUa8y1xlw3Fprl6TZoDsMAGYzZ+4vYFxLbqko2JDaBVLOPwuaOoGoNNncEACAdwdMg2y7Jm6TuUJBY6hLiCKQi2Apekpq1QDOhYkDFAL0BugFaw9Mac82YlhsD3RrW3FGjM7ZuZ+7DvNX32gNoPUDrHlr30H7wAQDtByC1tmL2daOnGz1S+eqOX3fXhUWmDfR0o1cx+xWzT82AVlznxmvdQ6cH3T50++A+eM0etJYDMPYtNFqLuruo2rOKNa+Ynm4slmYJZRN0V1BZj6buPgGJbVUlGxJPBl4mIAXtamzDERBs6AgAQDqCp0G2XZI3Sd2hIKHUJcYRSEWwFbw4NcvAAs3yNHuuOzPNHmvOSHMGleag3h0adxPnftbu8bWWqNluHzo9aN6B3V00mpOaPdSNntZ4qNkTgqo1JqiYIwqauTxsrBuDitmv2cNrd2y0pnTEhbtoe2lC3SE0B2Ddw3V3UW1NK+5Udya6M9PsuWZ5muVp7DPun/OEIaGtqmRDQmJn2IYjINjQEQCAdARPg2y7JG+SukNBQqlLjCOQimArUEAmmWSSSSaZZJJJJplkkkkmmQ4tvazYrAA2lG1Pd0FzFiVr9skaf7KGn6xhyR5qzui6NWs0Z2Z7YXfBvYXWPQBABw3PkL0oadz/tg+3fbjpBeg+BMD55Eh6Oh5uad37Iz0kp3kH7i04N2Dfgu5Mys60ZE8+WeNP5rRkzcr2XHOgbHvix9w75wkDJHOMULIhIbEzbMMRkMZ/Q0cAIB3BEyHbLsmbpO5QkFDqEuMIpCLYCl68mrWg7E8c90rW4pM59WGNy9ZEW36Moe5MjNbC6ngA4NwEFY5UteadX8M6949Ej7EEPIuAFEh26K47k5o9qVhjzZ6XrMUSULZBdyN2JDv2ivs0JLRVlWxISOwM23AEdncLjgBAOoInQrZdkjdJ3aEgodQlxhFIRbAVvCQ1a0dX3+BNexS6syg3RroxrBiTqjWuWbO6MwWARnNuNMFse3YH3Fto3UGnB90e3Aygcw+dh7WxHHHpkNGde2g/QOsOWvdgtsBoLRqud+3OatasYo70xlgzpjr7CJoNmngNt7dN0o4ICW1VJRsSErvExo7g2lls7ggApCN4ImTbJXmT1B0KkktdMhyBVARbwQtTs7a44pZMtjbYoDtQcaBizavmtGbNKACgbs8rxqRqTuv2/NpZGE2w2uB0wbmB7gN0e3DTD3A7CIDzuz3oPkDzDtwbcLpgd8BsgdGEhutdO4uKMSGXIFev2/O6Pa/ZoJn8bROgB/RY7JvthCG5rapkQ0Jil9jMEZA2eUNHACAdwRMh2y7Jm6TuUJBo6hLgCKQi2Apelpr9FIH/s/x/lJwAZQuqFtSsBQYAVM05+XfVnFfNecWYVYyZ3pjqjXHdGtftIcG1M7p2Rg13TEFy6AF1a1y353XbI0WRQrTriXY90RtTvTGtGDNyrbrt1W2v7kDZgk8WlGwo2fDJ8u+c3vwnx1tiTnD01fexSHSrKtmQkNgJNncEpNHe0BEAgHQET4NsuyRvkrpDQWKpS4gjkIpgK1hLzeayZ4ryKld0ceZV8fJEURRFSasXOD+jniqi/EL+QvHTaWFVPsr0k5q9ZO+qlOZvyVVTr4SXCOouebXRlbjkoNpMP6aM/gKAbs5qNtQcr2pB1V7gvxVzRGbVV61R1RrXbLL1dvCX5Fctf4duzZiSrxuT8skXoqr2omJ6FWtOr0uOKRmeZkPJhrIDZQfKLpRd38xeZt19Ap67VS3kBd/8zGX9b4GepOBqmYm/EUqQVvnS1NTzfj40sT7miEHee664/zsRglTgwr5v47mxuSMgfzd0BACwQ0cQ+EfOmVJvG3KyUPYdve9PqXOn/j2XPaM5mXxpZ29wh22Xq6ZenaTOrkS/Lh//tBBNL6KR6ZzgntJV8fK96KxD5k1IV+DvMnm4KsL77D7vJ7HUodrCmBtCKc1WNnSK3zEO96Jj+sZHQ92jEO8I/g1pk39lHIH9uW/sv/p31hH8sfjdiaJ8nv0OO4LvP/79spxf/RCrCHJf/i057rf/+DN1BFnU6vrv93tD6Aiu/sOvA79UL8KO4L/+8O1JbEMtFHpRgg7jUeIuhKiWc0WLGsZqNbt8GO4hS+klKRn1lD5nRj0lmcS0KGuF/AVrY/6zReV/yH59xTzVZyKKmVsq5C829abhteDk81PoLwCfw/71/A89rfM3QHyZ/l/BHUZuU/Yi5hU8Ac/aqlJXjSVoIQ/q0mGnkaDNZRnNkFHFGliq2SNDRhWPXCQBRMq+BDW7Ams4glV/13IBS2+yA0cQ+FDsc8u+pyb/ddXUq1C/gXQpgr4I59nLNuSyZ1Fi7/mwq7bL1wyiByQ/CXpvQjZIP4r2lHLZM7YXtG6P7UB4EyDNti2kJVRZNVvIR7q8mJ92g11Sl8t+XUD/pf3q5a9nXIXBVoksGkJGTcyZVyzHRN22cFW8fKNelC0oW0EbSBrhL9XTtPqNZkHh4zeKclpYNs6Fj8thwd9+Rx3Bj8Vv36jfaPZcs5xlOWJ3gEorpRXly48lzfI0q/R3QWnw4w/fvU6d/Sh2BKW0omQ+8qKsbEPZ9kj7EyORhEIvlz3Dgk4oaH2igtoVNGtplB8hhiMdU0Z9iwdl1mke14rNsubhPyS6ORomdS/RMRn1lN4B6/CCsGpEPlPOVfHyNeseCvmL99mv2Vty36vnO3Coh2iWEhQ7eH1pVoKeI29N1AKJy10W+bMK6L9k0Dot1ezRIa3AO3WnivFRvcAXEptNCHYZYEQu1VVTr2i3BrtpHIYlyGXPz7PnITXLiOE30WP2R0GdUK6X0qK+XSF/8U79ItxrvCpevk69fRPoCn7g4OhjsxlRo5fLSjUrxmXxJ/TfUhoZoDCAhkNBrIELatrJroZO9kLdtoAjaqHBguB14PZTSHhUOSEwzXIhf0HanKviT7jlyWXPot5dhCjzb3KdmHxI6JXO0bXwANw6ROE6TB8n/NRCx3RVvPyAWMqop+sMmD5NzQrGe0Rjum/pk2MLxOo0Kp97SWzhpXfqBXdLNKIdEw3fCg7RLCUodq9mMaJmmRbyfLDuvQpXsUUdChsSGKT3JpyO/nx4VC2SanaX2JMBlt4wI8i4d8X8l0gstqPMdAaiXPaRURdWs1G9w0L+IpP/z/DM5Fz2TM1+xN2kNfuXB80bBXF8qmhS8TvW8Uk1K3pwGuOK1KKkA7y0XKx+w51z8UDMUVK3PQQNI9cahBoHoRoSlMMhPEp4IgihC6apRlw3+C9bN+IQcVEfnCN41APSGG/8uW+iF3Q8n5rl7zgU1w6THsSgaQQ5Nj+yqIz6RSGSd8Hkn+1i72appvzZgLmiP95Jp+vgSYxptCCTsEEDg6QEvIYTr2ahhdNCckXG5dCSaQnpiHvgjhc6sx1jv2q2kGdop+CmGeeyAf9SzR4T1JT/ZtWUYLIxNsNCbCadEowzSW2h7UOBPYweSQ/A9khbkn+QanaH2IcBMnGe2HFqf7pTlJqNHm4/NupCfalSWlHU7Nfp0JIwstwp1H0knDPdzahtR46JN0TguuN3Us2GgacZk/jY+XKxOlZNdPEdqxx4cRVeo3fE1G0L3N4B2GZDGi9OzYYnv0SXI5CFsaOHkaKMBDbfL5e/xqjKeDWLY79RoyrCBwzFI4U7ETCOiUMoAC7G9tUsXr/OEucvQQmxGZUveH90cWwM7yFpvU0kwSwzatAV5mIp51n+gLQShIOoUiVjpcQ34OmveDoQlVi45431VZoVtLRzzF2dHE/82d43v9mvmg0vjqWn0DeIN8aQavaYgCPwYXPIZRlrIkcKM7lyTlJwiXYUo+Mg5ERs6WUkp8usbdKrEK1b2DdXLwQ7NkC0J0cQXI1Ss7nseXg/C3rKO/XtXkKLe6GOU7OExteps8KSMbxULJMvcd21Qv5CzV5GRcketc3JYfGGCIxTs+ENESk+5CN/2n1fYl8zKbhA60nqs/co5hZaExu5lc4a+/EcGXVbA9Zjm6jZmHnC66jZmNOjRVkprSgnqc8+LAPLMYI2Vs3GhIVj7jCofuttIiW8epzQxdiKmhWs8SWalovIZ/Kl8FrkqHwRO+559uNK3mPGPzZHEswSK1g8a7GQZ5p46iSIzsSqtRzRl+WULRdIxEdyBwvVbC6buN1u9qhmr4rwRsQGN834QzZgWKrZYwIeywhPvUuL+mfCTBpcjRqfKiPbDI9bhbfRxlch/c7Cvrl6IdiLAZKuA/HXQs+uZi/xiimRmlXeqF/Eb495TNSJ1Cz//QXCAx1tRzua0F6guJu74yBtAtUshozNhp76AlUMwWxSbtAktEGUMDb7ImYEbA/MDFhOzYZWk8ao2ciZtOWIZpZtXeP1ZJQoE6wliXr7MapqOST3CKLYO1+99xh2TBjrzVKG8nOum2V8AJ6VxO1jLMynwNOPhRuOi17MulL+CUiIWVKd816FD0uRyQkhkqmmVqjZcoSyvQoFfDh9izvKQjWLg7QJwR7V7BvRHGPCOSdyOMkhnJx8KGxIEMS/WeGC6qhV1sLvNnFqlp7LqdlwXeKaBbludpfY49zFpd8Ur5vF392hibh4bg/kXcYV90VdvJrFHKIPK/i9Rm5jT8oV+9WG3c3/3JMkW3epkVSzHOKnDdOaiUM4rBASdM53P9n4kHsazAZA5VBrsPa6Wb4c/LWzTL60xrpZRitiNZRWL6JF2cploQGi1Ox6W/3xD7hOyRzC97aeivaxhT2No24Ujypxd0lXAkTlC9/fmuw86y6LCTFLIhSvivAhH/Rc6fa5VMGW11OzwrV5FHT1LDc9Eve2o2Kzz6fEEvv6hGpWTUUqhJifZGz2aCDcvTPKHimi6lK4XyiMzRZsQWy2sN6Je2fsJWBfBshNnFMjwrDCTM7zEt17vF/o8Z8xvG4W75V1gkbn2SWOr15H7C7L7RKyZm/vsHjDiFrCwA3ySjXLYoWUov3nsMSK2j27LNXsYxDezYed+xmmV6xmI3YF4t71K9x6cI3qSl0XJcpYkbVyWa9gN6KYkPLaD7hWiJGbqPxYKbeWmhVFTYMNoCO0PhMWZ3cVZ77QI8xf+f6iW/+1pnc/GQkxS9LpfJ8NVru9Rivi6EpXPKExqvcc3lCXIKMyB3Pr8cps6JW7IpnEyE2n3Ls32sHr47QBJQdH2PCWWlHTj7l3dKBsSBCQWlEI5aspxppwb49sai3M5LZEJh8uJpfA9qiyq6/JYfiK5eUye9zRxJtI7Z23o0cCVuLhzpm4o7NyCtwykLvT9Xi7pC78fQg8vRD3f9geC1mxRk9kFmRximLNT1AcFm8YtGNQQJnpUDsj1SxLWrg3T9cC8MMoChuPjYrN7mX46UB7Gmx0LfgIKB0BFA3/BS9oZTkc0ExVwaLZNfSwWJThFjt+X+IIocc0/sIPia18wNgVv5HXEm6ZFIPVahYHxMPfrWLn+ga7GoTHftDkJT7MG3VKzPsLfyE6dhnx1pAcs8ThUC4KSmOtJyl4I1plh/cZDs+BpPOEX4u2P02zh5X9qhZc8T1SubjwJMRpn/X14RA33geL45/bvjjGQ0s1ewTgNmCj+WmFz6cbC+NKIszENY3YJjG0d6rANolAxeI2PBGDZp7LdbM7xM4MEG/NGBF95f07+2ug3Lg1Ptzyn6PbzSiyS0OpwBOJSQ6VCnSaKMvSacGfaSw45Vh4E4Nb81/Y350cBHXCFYPIlvnYD565Wg7ZJme5x03dxgjvniXYcItrSzHhS4uOL0fwxvEbRFgrQBq1CB/dWNy+wdwdsl6DqXJoT+PIB4xSjni9d5RjElXd1aOla8VmJSgO0CxXIDzkye0mdUw4vtcn2ZAoR0wKkEg4pAFK6iRvhwJJnaROIsmQavZxOD6zDAcA3yVs66Yt4vhen2RDoizV7GFCGqCkTvJ2KJDUSeokkgypZh+H4zPL8Hc7Cvu+pefD8b0+yYYEns8vBe0BQRqgpE7ydiiQ1EnqJJIMqWYfB2mWBw35+iQbEhIJgTRASZ3k7VAgqZPUSSQZCsgkk0wyySSTTDLJJJNMMskk06Gl/wdOAlNRXlM6qgAAAABJRU5ErkJggg==" alt="" /></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_122846" onclick="this.style.display='none'; Code_Closed_Text_122846.style.display='none'; Code_Open_Image_122846.style.display='inline'; Code_Open_Text_122846.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" height="16" width="11" align="top"><img id="Code_Open_Image_122846" style="display: none" onclick="this.style.display='none'; Code_Open_Text_122846.style.display='none'; Code_Closed_Image_122846.style.display='inline'; Code_Closed_Text_122846.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" height="16" width="11" align="top"><span id="Code_Closed_Text_122846" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"></span><span id="Code_Open_Text_122846" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m,ans;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;link[</span><span style="color: #000000; ">205</span><span style="color: #000000; ">][</span><span style="color: #000000; ">205</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;state[</span><span style="color: #000000; ">205</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;result[</span><span style="color: #000000; ">205</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;find(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">m&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(link[x][i]&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">state[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(result[i]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;find(result[i]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,j,Si,st;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(link,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(link));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(result,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(result));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">Si);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">Si&nbsp;;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">st);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link[i][st]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(state,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(state));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(find(i))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></span></div><img src ="http://www.cppblog.com/ArcTan/aggbug/181673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-07-06 12:29 <a href="http://www.cppblog.com/ArcTan/articles/181673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>