{"id":222,"date":"2010-04-15T12:25:00","date_gmt":"2010-04-15T04:25:00","guid":{"rendered":"http:\/\/localhost\/?p=222"},"modified":"2010-04-15T12:25:00","modified_gmt":"2010-04-15T04:25:00","slug":"sgu_145","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=222","title":{"rendered":"SGU 145"},"content":{"rendered":"\n<p>\u5c31\u662f\u4e00\u4e2a\u65e0\u5411\u56fe\u627evs\u5230vt\u7684\u7b2cK\u957f\u7b80\u5355\u8def\u3002\u3002<br \/>\u8fd9\u4e2a\u5b9e\u9645\u4e0a\u76f4\u63a5\u4e8c\u5206+\u526a\u679d\u5c31\u53ef\u4ee5\u4e86\u3002\u3002\u5173\u952e\u662f\u9898\u76ee\u4e00\u6a21\u4e00\u6837\u7684SCOI 2007 \u7684kshort(\u8fd9\u4e2a\u7684\u6570\u636e\u8303\u56f4\u53cd\u800c\u5c0f\u6655\u3002\u3002)\u53cd\u800cA\u4e0d\u6389\u3002\u3002\u56e7\u554a\u56e7\u3002\u3002\u3002\u3002<br \/>\u4e8c\u5206K\u77ed\u8def\u7684\u957f\u5ea6\uff0c\u7136\u540edfs\u5224\u65ad\u662f\u5426\u5b58\u5728K\u6761\u5c0f\u4e8e\u8fd9\u4e2a\u957f\u5ea6\u7684\u8def\u5f84\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u77e5\u9053K\u957f\u8def\u7684\u957f\u5ea6\uff0c\u7136\u540e\u751f\u6210\u6240\u6709\u8fd9\u4e9b\u8def\uff0c\u6392\u4e2a\u5e8f\u5c31\u53ef\u4ee5\u4e86\u6655\u3002\u3002<br \/>Code\uff1a<br \/>#include&lt;algorithm&gt;<br \/>#include&lt;vector&gt;<br \/>#include&lt;iostream&gt;<br \/>#include&lt;queue&gt;<br \/>#include&lt;cstring&gt;<br \/>#define pb push_back<br \/>using namespace std;<br \/>const int maxn=100,inf=~0U&gt;&gt;2;<br \/>int n,m,k,vs,vt;<br \/>struct Edge<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  int t,c;<br \/>&nbsp;&nbsp;&nbsp;  Edge(int _t,int _c):t(_t),c(_c){}<br \/>};<br \/>vector&lt;Edge&gt; E[maxn];<br \/>typedef vector&lt;Edge&gt;::iterator eit;<br \/>void AddEdge(int s,int t,int c)<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  E[s].pb(Edge(t,c));<br \/>&nbsp;&nbsp;&nbsp;  E[t].pb(Edge(s,c));<br \/>}<br \/>int Dist[maxn];<br \/>void Spfa(int vs,vector&lt;Edge&gt; E[maxn])<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  bool inq[maxn]={0};queue&lt;int&gt; Q;<br \/>&nbsp;&nbsp;&nbsp;  for(int i=0;i&lt;n;i++) Dist[i]=inf;<br \/>&nbsp;&nbsp;&nbsp;  Dist[vs]=0;inq[vs]=true;Q.push(vs);<br \/>&nbsp;&nbsp;&nbsp;  while(Q.size())<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int t=Q.front();Q.pop();inq[t]=false;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int cost=Dist[t],ncost;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for(eit e=E[t].begin();e!=E[t].end();++e)<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if((ncost=cost+e-&gt;c)&lt;Dist[e-&gt;t])<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { Dist[e-&gt;t]=ncost;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(!inq[e-&gt;t])<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  inq[e-&gt;t]=true,Q.push(e-&gt;t);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>}<br \/>bool vis[maxn]={0};<br \/>int Limit,Num;<br \/>void dfs(int no,int gone)<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  vis[no]=true;<br \/>&nbsp;&nbsp;&nbsp;  if(Num&gt;=k)goto end;<br \/>&nbsp;&nbsp;&nbsp;  if(gone+Dist[no]&gt;Limit) goto end;<br \/>&nbsp;&nbsp;&nbsp;  if(no==vt){Num++;goto end;}<br \/>&nbsp;&nbsp;&nbsp;  for(eit e=E[no].begin();e!=E[no].end();++e)if(!vis[e-&gt;t])<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  dfs(e-&gt;t,gone+e-&gt;c);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(Num&gt;=k) goto end;<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  end:<br \/>&nbsp;&nbsp;&nbsp;  vis[no]=false;<br \/>}<br \/>int Now[maxn];<br \/>struct Route<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  int*A;<br \/>&nbsp;&nbsp;&nbsp;  int n,Len;<br \/>&nbsp;&nbsp;&nbsp;  Route(int _n,int _Len)<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  n=_n;Len=_Len;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  A=new int[n];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  memcpy(A,Now,sizeof(int)*n);<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  bool operator&lt;(const Route&amp;o)const<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return Len&lt;o.Len;<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  void show()const<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cout&lt;&lt;Len&lt;&lt;&quot; &quot;&lt;&lt;n&lt;&lt;endl;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for(int i=0;i&lt;n-1;i++)<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cout&lt;&lt;A[i]+1&lt;&lt;&quot; &quot;;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cout&lt;&lt;A[n-1]+1&lt;&lt;endl;<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>};<br \/>vector&lt;Route&gt; Rs;<br \/>void Sdfs(int no,int gone,int d)<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  vis[no]=true;<br \/>&nbsp;&nbsp;&nbsp;  Now[d-1]=no;<br \/>&nbsp;&nbsp;&nbsp;  if(gone+Dist[no]&gt;Limit) goto end;<br \/>&nbsp;&nbsp;&nbsp;  if(no==vt)<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Rs.pb(Route(d,gone));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  goto end;<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  for(eit e=E[no].begin();e!=E[no].end();++e)if(!vis[e-&gt;t])<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Sdfs(e-&gt;t,gone+e-&gt;c,d+1);<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  end:<br \/>&nbsp;&nbsp;&nbsp;  vis[no]=false;<br \/>}<br \/>bool Check(int _Limit)<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  Num=0;<br \/>&nbsp;&nbsp;&nbsp;  Limit=_Limit;<br \/>&nbsp;&nbsp;&nbsp;  dfs(vs,0);<br \/>&nbsp;&nbsp;&nbsp;  return Num&gt;=k;<br \/>}<br \/>void Get(int _Limit)<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  Limit=_Limit;<br \/>&nbsp;&nbsp;&nbsp;  Sdfs(vs,0,1);<br \/>&nbsp;&nbsp;&nbsp;  sort(Rs.begin(),Rs.end());<br \/>&nbsp;&nbsp;&nbsp;  Rs[k-1].show();<br \/>}<br \/>void Init()<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  cin&gt;&gt;n&gt;&gt;m&gt;&gt;k;<br \/>&nbsp;&nbsp;&nbsp;  int s,t,c;<br \/>&nbsp;&nbsp;&nbsp;  while(m&#8211;)<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cin&gt;&gt;s&gt;&gt;t&gt;&gt;c;s&#8211;;t&#8211;;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  AddEdge(s,t,c);<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  cin&gt;&gt;vs&gt;&gt;vt;vs&#8211;;vt&#8211;;<br \/>}<br \/>void Work()<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  Spfa(vt,E);<br \/>&nbsp;&nbsp;&nbsp;  int l=0,r=inf;<br \/>&nbsp;&nbsp;&nbsp;  if(!Check(r))<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cout&lt;&lt;&quot;No&quot;&lt;&lt;endl;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  while(l+1&lt;r)<br \/>&nbsp;&nbsp;&nbsp;  {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int m=l+r&gt;&gt;1;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(Check(m))<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  r=m;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  l=m;<br \/>&nbsp;&nbsp;&nbsp;  }<br \/>&nbsp;&nbsp;&nbsp;  Get(r);<br \/>}<br \/>int main()<br \/>{<br \/>&nbsp;&nbsp;&nbsp;  \/\/freopen(&quot;in&quot;,&quot;r&quot;,stdin);<br \/>&nbsp;&nbsp;&nbsp;  Init();<br \/>&nbsp;&nbsp;&nbsp;  Work();<br \/>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5c31\u662f\u4e00\u4e2a\u65e0\u5411\u56fe\u627evs\u5230vt\u7684\u7b2cK\u957f\u7b80\u5355\u8def\u3002\u3002\u8fd9\u4e2a\u5b9e\u9645\u4e0a\u76f4\u63a5\u4e8c\u5206+\u526a\u679d\u5c31\u53ef\u4ee5\u4e86\u3002\u3002\u5173\u952e\u662f\u9898\u76ee\u4e00\u6a21\u4e00\u6837\u7684SCOI 2007 \u7684kshort(\u8fd9\u4e2a\u7684\u6570\u636e\u8303\u56f4\u53cd\u800c\u5c0f\u6655\u3002\u3002)\u53cd\u800cA\u4e0d\u6389\u3002\u3002\u56e7\u554a\u56e7\u3002\u3002\u3002\u3002\u4e8c\u5206K\u77ed\u8def\u7684\u957f\u5ea6\uff0c\u7136\u540edfs\u5224\u65ad\u662f\u5426\u5b58\u5728K\u6761\u5c0f\u4e8e\u8fd9\u4e2a\u957f\u5ea6\u7684\u8def\u5f84\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u77e5\u9053K\u957f\u8def\u7684\u957f\u5ea6\uff0c\u7136\u540e\u751f\u6210\u6240\u6709\u8fd9\u4e9b\u8def\uff0c\u6392\u4e2a\u5e8f\u5c31\u53ef\u4ee5\u4e86\u6655\u3002\u3002Code\uff1a#include&lt;algorithm&gt;#include&lt;vector&gt;#include&lt;iostream&gt;#include&lt;queue&gt;#include&lt;cstring&gt;#define pb push_backusing namespace std;const int maxn=100,inf=~0U&gt;&gt;2;int n,m,k,vs,vt;struct Edge{&nbsp;&nbsp;&nbsp; int t,c;&nbsp;&nbsp;&nbsp; Edge(int _t,int _c):t(_t),c(_c){}};vector&lt;Edge&gt; E[maxn];typedef vector&lt;Edge&gt;::iterator eit;void AddEdge(int s,int t,int c){&nbsp;&nbsp;&nbsp; E[s].pb(Edge(t,c));&nbsp;&nbsp;&nbsp; E[t].pb(Edge(s,c));}int Dist[maxn];void Spfa(int vs,vector&lt;Edge&gt; E[maxn]){&nbsp;&nbsp;&nbsp; bool inq[maxn]={0};queue&lt;int&gt; Q;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;n;i++) Dist[i]=inf;&nbsp;&nbsp;&nbsp; Dist[vs]=0;inq[vs]=true;Q.push(vs);&nbsp;&nbsp;&nbsp; while(Q.size())&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int t=Q.front();Q.pop();inq[t]=false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int cost=Dist[t],ncost;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(eit e=E[t].begin();e!=E[t].end();++e)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((ncost=cost+e-&gt;c)&lt;Dist[e-&gt;t])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { Dist[e-&gt;t]=ncost;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!inq[e-&gt;t])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inq[e-&gt;t]=true,Q.push(e-&gt;t);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; }}bool vis[maxn]={0};int Limit,Num;void dfs(int no,int [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/222"}],"collection":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=222"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/222\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}