{"id":649,"date":"2009-11-01T15:57:00","date_gmt":"2009-11-01T07:57:00","guid":{"rendered":"http:\/\/localhost\/?p=6"},"modified":"2009-11-01T15:57:00","modified_gmt":"2009-11-01T07:57:00","slug":"sgu103","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=649","title":{"rendered":"sgu103"},"content":{"rendered":"<p> \u5c31\u662f\u6700\u77ed\u8def\u3002\u3002\u6ca1\u6709\u4efb\u4f55\u96be\u70b9\u3002\u3002\u5c31\u662f\u6298\u78e8\u4f60\u548c\u4f60\u7684\u952e\u76d8\u7684\u3002\u3002<br \/>\u611f\u89c9\u6211\u5199\u7684\u5f88\u4e0d\u9519\u963f\u3002\u3002\u601d\u8def\u5f88\u6e05\u6670\u963f\u3002\u3002\uff08\u5c0f\u81ea\u604b\u4e00\u4e0b\u3002\u3002\u3002\uff09<br \/>\u8ddf\u6700\u77ed\u8def\u4e00\u6837\u7528D[X]\u8868\u793a\u5230X\u7684\u6700\u77ed\u8def\u3002\u3002<br \/>\u4eceX\u66f4\u65b0\u6709\u4e24\u79cd\u529e\u6cd5\u3002\u3002<br \/>\u4e00\u662f\u76f4\u63a5\u4e0a\uff08\u4e24\u8fb9\u989c\u8272\u8981same\uff09<br \/>\u4e8c\u662f\u7b49\u7b49\u4e0a\u3002\u3002\u3002\uff08\u4e5f\u53ef\u80fd\u7b49\u4e0d\u5230\u963f\u3002\u3002\uff09<br \/>\u76f4\u63a5\u4e0a\u81ea\u7136\u6ca1\u6709\u82b1\u5934\u3002\u3002\u7b49\u7b49\u4e0a\u5c31\u8ddf\u6ce1\u599e\u7684\u8fc2\u56de\u6218\u672f\u4e00\u6837\u3002\u3002<br \/>\u5f88\u590d\u6742\u963f\u3002\u3002\u5f88BT\u963f\u3002\u3002\u61d2\u5f97\u5199\u3002\u3002\u770b\u7a0b\u5e8f\u5427\u3002\u3002\u3002<br \/>\u6211\u4e00\u5f00\u59cb\u5c31\u5199\u4e86\u4e24\u4e2a\u51fd\u6570\u6765\u7b80\u5316\u601d\u7ef4\u3002\u3002\u5b9e\u9645\u4e0a\u8fd9\u4e24\u4e2a\u51fd\u6570\u4e5f\u4e0d\u662f\u90a3\u4e48\u597d\u5199\u7684\u3002\u3002<br \/>\u611f\u89c9\u8fd9\u4e24\u4e2a\u51fd\u6570\u505a\u4e86\u5f88\u591a\u91cd\u590d\u7684\u5de5\u4f5c\u963f\u3002\u3002\u4e0d\u8be5\u5206\u5f00\u963f\uff08\u4e0d\u8fc7\u61d2\u5f97\u6539\u4e86\uff09\u3002\u3002<br \/>\/\/important function<br \/>bool Colour(int n,int time)<br \/>{<br \/>if(time&lt;Start[n]) return First[n];<br \/>time-=Start[n];<br \/>time%=(Dur[n][1]+Dur[n][0]);<br \/>if(time&lt;Dur[n][ !First[n] ]) return !First[n];<br \/>return First[n];<br \/>}<br \/>int Next(int n,int time)<br \/>{<br \/>if(time&lt;Start[n]) return Start[n]-time;<br \/>time-=Start[n];<br \/>time%=(Dur[n][1]+Dur[n][0]);<br \/>if(time&lt;Dur[n][!First[n]]) return Dur[n][!First[n]]-time;<br \/>return Dur[n][0]+Dur[n][1]-time;<br \/>}<br \/>P.S\u8fd9\u660e\u660e\u662f\u4e2a\u7a20\u5bc6\u56fe\u6211\u5c45\u7136\u6c99\u8336\u5230\u4e9bHeap+Dij\u3002\u3002\u7ed3\u679c\u6162\u7684\u8981\u6b7b\u3002\u3002<br \/>Code\u3002\u3002<br \/>#include&lt;iostream&gt;<br \/>#include&lt;string.h&gt;<br \/>using namespace std;<br \/>\/\/main data<br \/>const int maxn=301;<br \/>const bool Blue=1,Purple=0;<br \/>const int inf=~0U&gt;&gt;1;<br \/>int Start[maxn],Dur[maxn][2],First[maxn];<br \/>\/\/important function<br \/>bool Colour(int n,int time)<br \/>{<br \/>if(time&lt;Start[n]) return First[n];<br \/>time-=Start[n];<br \/>time%=(Dur[n][1]+Dur[n][0]);<br \/>if(time&lt;Dur[n][ !First[n] ]) return !First[n];<br \/>return First[n];<br \/>}<br \/>int Next(int n,int time)<br \/>{<br \/>if(time&lt;Start[n]) return Start[n]-time;<br \/>time-=Start[n];<br \/>time%=(Dur[n][1]+Dur[n][0]);<br \/>if(time&lt;Dur[n][!First[n]]) return Dur[n][!First[n]]-time;<br \/>return Dur[n][0]+Dur[n][1]-time;<br \/>}<br \/>\/\/graph<br \/>int N,M;<br \/>int vs,vt;<br \/>struct edge<br \/>{<br \/>int t,c;<br \/>edge* next;<br \/>edge(int tt,int cc,edge* nn):t(tt),c(cc){next=nn;}<br \/>}*E[maxn];<br \/>inline void add(int s,int t,int c)<br \/>{<br \/>E[s]=new edge(t,c,E[s]);<br \/>E[t]=new edge(s,c,E[t]);<br \/>}<br \/>\/\/heap<\/p>\n<p>class heap<br \/>{<br \/>int Q[maxn],s,index[maxn],rdex[maxn];<br \/>void exch(int&amp;x,int&amp;y)<br \/>{int t=x;x=y;y=t;}<br \/>void swap(int x,int y)<br \/>{<br \/>exch(Q[x],Q[y]);exch(index[x],index[y]);<br \/>rdex[index[x]]=x;rdex[index[y]]=y;<br \/>}<br \/>void sink(int x)&#160;&#160;&#160; <br \/>{<br \/>int t=2*x;<br \/>while(t&lt;=s)<br \/>{<br \/>if(t+1&lt;=s&amp;&amp;Q[t+1]&lt;Q[t]) t++;<br \/>if(Q[x]&lt;Q[t]) break;<br \/>swap(x,t);x=t;t=2*x;<br \/>}<br \/>}&#160;&#160;&#160; <br \/>void swim(int x)<br \/>{<br \/>int t=x\/2;<br \/>while(t)<br \/>{<br \/>if(Q[t]&gt;Q[x]) swap(x,t);<br \/>else break;<br \/>x=t;t=x\/2;<br \/>}<br \/>}<br \/>public:<br \/>void set(int n)<br \/>{<br \/>s=n;<br \/>for(int i=1;i&lt;=s;i++)<br \/>{<br \/>index[i]=rdex[i]=i;<br \/>Q[i]=inf;<br \/>}<br \/>}<br \/>int Pop()<br \/>{&#160;&#160;&#160; &#160;&#160;&#160; <br \/>int t=index[1];<br \/>swap(1,s);s&#8211;;<br \/>sink(1);&#160;&#160;&#160; <br \/>return t;<br \/>}<br \/>void Lower(int x,int d)<br \/>{&#160;&#160;&#160; &#160;&#160;&#160; <br \/>Q[ rdex[x] ]=d;<br \/>swim( rdex[x] );<br \/>}&#160;&#160;&#160; <br \/>bool Empty(){return s==0;}<br \/>int operator[](int v)<br \/>{ return Q[ rdex[v] ]; }<br \/>};<br \/>void init()<br \/>{<br \/>cin&gt;&gt;vs&gt;&gt;vt;<br \/>cin&gt;&gt;N&gt;&gt;M;<br \/>for(int i=1;i&lt;=N;i++)<br \/>{<br \/>char t;cin&gt;&gt;t;First[i]=(t==&#8217;B&#8217;);<br \/>cin&gt;&gt;Start[i]&gt;&gt;Dur[i][1]&gt;&gt;Dur[i][0];<br \/>}<br \/>for(int i=0;i&lt;M;i++)<br \/>{<br \/>int s,t,c;cin&gt;&gt;s&gt;&gt;t&gt;&gt;c;<br \/>add(s,t,c);<br \/>}<br \/>}<br \/>int P[maxn];<br \/>heap H;<br \/>bool dijstra()<br \/>{<br \/>H.set(N);<br \/>H.Lower(vs,0);P[vs]=0;&#160;&#160;&#160; <br \/>bool Cal[maxn]={0};<br \/>while( !H.Empty() )<br \/>{<br \/>int v=H.Pop();<br \/>if(H[v]==inf) return false;<br \/>Cal[v]=true;<br \/>if(v==vt) return true;<br \/>int nextv=Next(v,H[v]);<br \/>bool colourv=Colour(v,H[v]);<br \/>for(edge*i=E[v];i;i=i-&gt;next)<br \/>if(!Cal[i-&gt;t])<br \/>{<br \/>int p=H[v]+i-&gt;c,w=i-&gt;t;<br \/>if( Colour(w,H[v]) != colourv )&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <br \/>{<br \/>int nextw=Next(w,H[v]);<br \/>bool colourw=Colour(w,H[v]);<br \/>p+=min(nextv,nextw);<br \/>if( nextw==nextv )<br \/>{<br \/>if(Dur[v][!colourv]!=Dur[w][!colourw])<br \/>p+=min(Dur[v][!colourv],Dur[w][!colourw]);<br \/>else<br \/>{<br \/>if(Dur[v][colourv]==Dur[w][colourw]) continue;<br \/>p+=min(Dur[v][colourv],Dur[w][colourw]);<br \/>}<br \/>}<br \/>}<br \/>if(p&lt;H[w])<br \/>{<br \/>H.Lower(w,p);<br \/>P[w]=v;<br \/>}<br \/>}<br \/>}<br \/>return false;<br \/>}<br \/>int main()<br \/>{<br \/>init();<br \/>if(!dijstra() )<br \/>{<br \/>cout&lt;&lt;0&lt;&lt;endl;<br \/>return 0;<br \/>}<br \/>cout&lt;&lt;H[vt]&lt;&lt;endl;<br \/>int x=vt;<br \/>int ans[maxn],cnt=0;<br \/>while(P[x])<br \/>{<br \/>ans[cnt++]=x;<br \/>x=P[x];<br \/>}<br \/>ans[cnt++]=vs;<br \/>cout&lt;&lt;ans[cnt-1];<br \/>for(int i=cnt-2;i&gt;=0;i&#8211;)<br \/>cout&lt;&lt;&quot; &quot;&lt;&lt;ans[i];<br \/>cout&lt;&lt;endl;<br \/>} <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5c31\u662f\u6700\u77ed\u8def\u3002\u3002\u6ca1\u6709\u4efb\u4f55\u96be\u70b9\u3002\u3002\u5c31\u662f\u6298\u78e8\u4f60\u548c\u4f60\u7684\u952e\u76d8\u7684\u3002\u3002\u611f\u89c9\u6211\u5199\u7684\u5f88\u4e0d\u9519\u963f\u3002\u3002\u601d\u8def\u5f88\u6e05\u6670\u963f\u3002\u3002\uff08\u5c0f\u81ea\u604b\u4e00\u4e0b\u3002\u3002\u3002\uff09\u8ddf\u6700\u77ed\u8def\u4e00\u6837\u7528D[X]\u8868\u793a\u5230X\u7684\u6700\u77ed\u8def\u3002\u3002\u4eceX\u66f4\u65b0\u6709\u4e24\u79cd\u529e\u6cd5\u3002\u3002\u4e00\u662f\u76f4\u63a5\u4e0a\uff08\u4e24\u8fb9\u989c\u8272\u8981same\uff09\u4e8c\u662f\u7b49\u7b49\u4e0a\u3002\u3002\u3002\uff08\u4e5f\u53ef\u80fd\u7b49\u4e0d\u5230\u963f\u3002\u3002\uff09\u76f4\u63a5\u4e0a\u81ea\u7136\u6ca1\u6709\u82b1\u5934\u3002\u3002\u7b49\u7b49\u4e0a\u5c31\u8ddf\u6ce1\u599e\u7684\u8fc2\u56de\u6218\u672f\u4e00\u6837\u3002\u3002\u5f88\u590d\u6742\u963f\u3002\u3002\u5f88BT\u963f\u3002\u3002\u61d2\u5f97\u5199\u3002\u3002\u770b\u7a0b\u5e8f\u5427\u3002\u3002\u3002\u6211\u4e00\u5f00\u59cb\u5c31\u5199\u4e86\u4e24\u4e2a\u51fd\u6570\u6765\u7b80\u5316\u601d\u7ef4\u3002\u3002\u5b9e\u9645\u4e0a\u8fd9\u4e24\u4e2a\u51fd\u6570\u4e5f\u4e0d\u662f\u90a3\u4e48\u597d\u5199\u7684\u3002\u3002\u611f\u89c9\u8fd9\u4e24\u4e2a\u51fd\u6570\u505a\u4e86\u5f88\u591a\u91cd\u590d\u7684\u5de5\u4f5c\u963f\u3002\u3002\u4e0d\u8be5\u5206\u5f00\u963f\uff08\u4e0d\u8fc7\u61d2\u5f97\u6539\u4e86\uff09\u3002\u3002\/\/important functionbool Colour(int n,int time){if(time&lt;Start[n]) return First[n];time-=Start[n];time%=(Dur[n][1]+Dur[n][0]);if(time&lt;Dur[n][ !First[n] ]) return !First[n];return First[n];}int Next(int n,int time){if(time&lt;Start[n]) return Start[n]-time;time-=Start[n];time%=(Dur[n][1]+Dur[n][0]);if(time&lt;Dur[n][!First[n]]) return Dur[n][!First[n]]-time;return Dur[n][0]+Dur[n][1]-time;}P.S\u8fd9\u660e\u660e\u662f\u4e2a\u7a20\u5bc6\u56fe\u6211\u5c45\u7136\u6c99\u8336\u5230\u4e9bHeap+Dij\u3002\u3002\u7ed3\u679c\u6162\u7684\u8981\u6b7b\u3002\u3002Code\u3002\u3002#include&lt;iostream&gt;#include&lt;string.h&gt;using namespace std;\/\/main dataconst int maxn=301;const bool Blue=1,Purple=0;const int inf=~0U&gt;&gt;1;int Start[maxn],Dur[maxn][2],First[maxn];\/\/important functionbool Colour(int n,int time){if(time&lt;Start[n]) return First[n];time-=Start[n];time%=(Dur[n][1]+Dur[n][0]);if(time&lt;Dur[n][ !First[n] ]) return !First[n];return First[n];}int Next(int n,int time){if(time&lt;Start[n]) return Start[n]-time;time-=Start[n];time%=(Dur[n][1]+Dur[n][0]);if(time&lt;Dur[n][!First[n]]) return Dur[n][!First[n]]-time;return Dur[n][0]+Dur[n][1]-time;}\/\/graphint N,M;int vs,vt;struct edge{int t,c;edge* next;edge(int tt,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\/649"}],"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=649"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/649\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}