锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美成人精品在线,亚洲欧美日韩成人,国产精品久久久久久久久免费樱桃 http://www.shnenglu.com/MatoNo1/archive/2013/08/31/202905.htmlMato_No1Mato_No1Sat, 31 Aug 2013 15:39:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2013/08/31/202905.htmlhttp://www.shnenglu.com/MatoNo1/comments/202905.htmlhttp://www.shnenglu.com/MatoNo1/archive/2013/08/31/202905.html#Feedback1http://www.shnenglu.com/MatoNo1/comments/commentRss/202905.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/202905.html闃呰鍏ㄦ枃

Mato_No1 2013-08-31 23:39 鍙戣〃璇勮
]]>
銆怉HOI2013澶嶄粐銆戜簩緇碊P浼樺寲鐨勫嚑閬撻鎬葷粨http://www.shnenglu.com/MatoNo1/archive/2013/03/03/198185.htmlMato_No1Mato_No1Sun, 03 Mar 2013 07:25:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2013/03/03/198185.htmlhttp://www.shnenglu.com/MatoNo1/comments/198185.htmlhttp://www.shnenglu.com/MatoNo1/archive/2013/03/03/198185.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/198185.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/198185.html銆?銆?a title="BZOJ1713" >BZOJ1713
F[i][j]=max{F[i1][j1] - (sA[i-1]-sA[i1])2 - (sB[j-1]-sB[j1])2} + A[i]*B[j], 0<=i1<i, 0<=j1<j
瀵硅繖涓紡瀛愯繘琛屽寲綆錛?br />F[i][j]=max{F[i1][j1] - sA[i1]2 + 2*sA[i-1]*sA[i1] - sB[j1]2 + 2*sB[j-1]*sB[j1]}+A[i]*B[j]-sA[i-1]2-sB[j-1]2
瀵逛簬涓緇寸殑鎯呭喌錛屽緢瀹規槗澶勭悊——涓棿灝辨槸涓鏉$洿綰匡紝鐒惰岃繖鏄簩緇寸殑錛屽浜庤繖縐?D/2D鐨凞P鏂圭▼錛岃浼樺寲鍒癘(N2)綰у埆錛岄渶瑕佷袱姝ャ?br />娉ㄦ剰鍒板喅絳栧紡涓櫎浜咶[i1][j1]澶栵紝鍏跺畠閮ㄥ垎閮借涔堝彧涓巌1鏈夊叧錛岃涔堝彧涓巎1鏈夊叧銆傚洜姝わ紝鍙互鎶婇樁孌礽鐨勫悇涓姸鎬佷綔涓轟竴涓暣浣擄紝鍦ㄤ箣鍓嶅緱鍑虹殑鍚勪釜F[i][j]涓紝瀵逛簬鐩稿悓鐨刯錛屾壘鍒板浜庣洰鍓嶇殑i錛屾渶浼樼殑閭d釜鍐崇瓥——娉ㄦ剰錛屽浜庣浉鍚岀殑j1錛岄噷闈㈡墍鏈変笌j1鏈夊叧鐨勪笢瑗塊兘鍙互鍏堜笉鑰冭檻浜嗭紝鍙冭檻(F[i1][j1] - sA[i1]2 + 2*sA[i-1]*sA[i1])瀵逛簬鐩墠i鐨勬渶浼樺喅絳栥傝繖涓姝ュ彲浠ュ湪榪欎簺鐩寸嚎褰㈡垚鐨勪笂鍑稿3涓壘鍒幫紝涓旀弧瓚沖喅絳栧崟璋冩э紝鍙互鐢ㄤ竴涓爤澶勭悊錛堟枩鐜囦紭鍖栵級銆傜劧鍚庯紝灝嗚繖浜涙渶浼樺喅絳栦互j涓鴻嚜鍙橀噺鍐嶇粍鎴愪竴浜涚洿綰匡紝鐢ㄦ爤緇存姢瀹冧滑鐨勪笂鍑稿3錛屽浜庢瘡涓猨錛屾壘鍒版渶浼樺煎嵆鍙?br />娉ㄦ剰浜嬮」錛氬湪鏍堜腑鍒犻櫎鐩寸嚎鐨勬椂鍊欙紝濡傛灉涔嬪墠鐨勬渶浼樺喅絳栨槸榪欎釜琚垹鎺夌殑鐩寸嚎錛屽垯瑕佸皢鏈浼樺喅絳栧厛緗負涓嶅瓨鍦紝鐒跺悗鍐嶆彃鍏ユ柊鐩寸嚎鍚庤涓烘柊鐩寸嚎銆傚彟澶栵紝瑕佺壒鍒敞鎰忓鉤琛岀殑鎯呭喌銆?br />
銆?銆慙CIS
緇忓吀闂錛屽埄鐢ㄤ笂闈㈢殑鍒嗘浼樺寲鎬濇兂錛屽緢瀹規槗鐢ㄧ嚎孌墊爲寰楀埌涓涓狾(N2logN)鐨勫仛娉曘?br />
銆?銆?a title="[SCOI2010]鑲$エ浜ゆ槗 " >[SCOI2010]鑲$エ浜ゆ槗
F[i][j]=max{F[i-1][j], max{F[i-W-1][j-a]-A*a, F[i-W-1][j+b]+b*B}}, j<=maxP, 1<=a<=maxA, 1<=b<=maxB
娉ㄦ剰瀵逛簬鐩稿悓鐨刯錛岃綆楁柟娉曟槸涓鏍風殑錛屼笖鏄竴鏉$洿綰匡紙鐢變簬鏈夎寖鍥存墍浠ュ叾瀹炴槸綰挎錛夈?br />鎵浠ワ紝璁$畻闃舵i鏃訛紝鍙互灝?i-W-1)闃舵鎵鏈夌殑鍐崇瓥褰撴垚綰挎鎻掑叆錛岃繖浜涚嚎孌電殑鏂滅巼閮界浉絳夛紝鍥犳姣旇緝濂界淮鎶わ紝鍙渶瑕佸垽鏂竟鐣屽嵆鍙?br />
娉ㄦ剰錛孨OI2011鐨剆how铏界劧涔熺鍚堝浜庣浉鍚岀殑j璁$畻鏂規硶涓鏍鳳紝浣嗗畠灝變笉鑳戒紭鍖栵紝鍥犱負瀹冪殑鍐崇瓥鏄笉榪炵畫涓旀棤瑙勫緥鐨勶紝娌℃湁浠諱綍鍑犱綍鎬ц川銆傚洜姝わ紝瀹冨彧鑳界敤O(N3)鐨勭畻娉曡綆楀嚭鎵鏈夌姸鎬併?br />

Mato_No1 2013-03-03 15:25 鍙戣〃璇勮
]]>
銆怉HOI2013澶嶄粐銆戝姩鎬佸嚫鍖?/title><link>http://www.shnenglu.com/MatoNo1/archive/2013/02/28/198024.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Thu, 28 Feb 2013 10:29:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2013/02/28/198024.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/198024.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2013/02/28/198024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/198024.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/198024.html</trackback:ping><description><![CDATA[     鎽樿: 鍘熼鍦板潃鍐欎簡鍑犲ぉ緇堜簬鍐欏嚭鏉ヤ簡……錛堟樉鐒訛紝鎴戝お寮變簡錛岃鍚勪綅紲炵妵涓嶈閯欒錛夊湪鏈夊姞鐐圭殑鎯呭喌涓嬶紝鍔ㄦ佸湴緇存姢鍑稿寘錛屾湁浠ヤ笅涓ょ鏂規硶錛?lt;1>緇存姢涓娿佷笅鍑稿3錛堟湰娌欒尪閲囩敤鐨勬柟娉曪級錛氬嚫鍖呭彲浠ユ媶鎴愪笂銆佷笅鍑稿3錛屽瀹冧滑鍒嗗埆緇存姢銆備袱涓嚫澹沖潎鎸夌収涓嬮潰瀹氫箟鐨?lt;鍏崇郴錛堝嵆鍏坸澧炪佸啀y澧烇級鎺掑簭錛屾敞鎰忥紝涓や釜鍑稿3鐨勪袱绔槸鐩稿悓鐨勶紝鍧囦負鏁翠釜鍑稿寘鐨勬渶灝忕偣涓庢渶澶х偣錛岄櫎涓ょ澶栵紝瀹冧滑娌℃湁鍏叡瀹氱偣銆備互涓婂嚫澹充負渚?..  <a href='http://www.shnenglu.com/MatoNo1/archive/2013/02/28/198024.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/MatoNo1/aggbug/198024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2013-02-28 18:29 <a href="http://www.shnenglu.com/MatoNo1/archive/2013/02/28/198024.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆怉HOI2013澶嶄粐銆戝悜JZPKIL璁よ緭浜?/title><link>http://www.shnenglu.com/MatoNo1/archive/2013/02/06/197761.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Wed, 06 Feb 2013 15:26:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2013/02/06/197761.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/197761.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2013/02/06/197761.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/197761.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/197761.html</trackback:ping><description><![CDATA[RT錛?br />浠婂ぉ鍙堜紭鍖栦簡涓涓婮ZPKIL錛岀敤涓婁簡鍚勭鏃犺葷殑鎵嬫錛屼粛鐒舵棤娉曞共鎺夊悗涓や釜鐐癸紝騫朵笖BZOJ涓婄殑鎬繪椂闂?0s涔熸棤娉曞疄鐜幫紙鍚庝袱涓偣涓涓氨瑕?0s錛夛紝<br />鐪嬫潵鍩轟簬緇勫悎鏁扮殑鍋氭硶鐢變簬瑕佹灇涓懼洜鏁幫紝紜疄涓嶈……<br />錛堟敞錛氬悗涓や釜鐐規槸浜哄伐鏋勯犵殑鐚ョ悙鏁版嵁錛屾墍鏈夌殑N閮芥槸鑻ュ共涓皬璐ㄦ暟涔嬬Н錛屽洜鏁頒釜鏁伴兘涓婂崈錛屾湁鐨勭敋鑷充笂涓?#8230;…錛?br /><br />璁よ緭浜?#8230;…<br />Orz @sevenk<img src ="http://www.shnenglu.com/MatoNo1/aggbug/197761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2013-02-06 23:26 <a href="http://www.shnenglu.com/MatoNo1/archive/2013/02/06/197761.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆怉HOI2013澶嶄粐銆憇-t絎琄鐭畝鍗曡礬闂http://www.shnenglu.com/MatoNo1/archive/2012/09/23/191705.htmlMato_No1Mato_No1Sun, 23 Sep 2012 06:28:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/09/23/191705.htmlhttp://www.shnenglu.com/MatoNo1/comments/191705.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/09/23/191705.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/191705.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/191705.html[SCOI2007 kshort]
姹傚浘鐨剆-t絎琄鐭畝鍗曡礬闂錛岃嫢鏈夐暱搴︾浉鍚岀殑錛屽瓧鍏稿簭灝忕殑浼樺厛銆?br />
棣栧厛錛岀敱浜庢槸綆鍗曡礬錛屾墍浠?a title="A*" href="http://www.shnenglu.com/MatoNo1/archive/2011/05/01/145456.html">A*鏄笉鑳藉仛鐨勶紝鍥犱負鏈夊彲鑳芥湁涓ゆ潯s-i錛坕涓烘煇涓腑闂寸偣錛夎礬P1鍜孭2錛孭1姣擯2鐭紝浣嗙敱浜嶱1鍒拌揪鐨勯《鐐逛笌P2涓嶅悓錛屽鑷存渶緇堟部P1鍒拌揪t鐨勮礬寰勯暱搴﹂暱浜庢部P2鍒拌揪t鐨勶紙鐢氳嚦鏈夊彲鑳芥部P1鏍規湰鍒頒笉浜唗錛夈傜劧鍚庯紝濡傛灉鐩存帴鐢―FS錛岀敱浜庤姹傜殑鏄K浼樿В錛岃屼笉鏄渶浼樿В錛屾墍浠ヤ笉鑳戒嬌鐢ㄦ渶浼樻у壀鏋濓紙鍖呮嫭鍒嗘敮闄愮晫錛夛紝鍥犳涓撻棬涓烘渶浼樻у壀鏋濇湇鍔$殑“鏀瑰彉鎼滅儲欏哄簭”鎶宸т篃涓嶈兘浣跨敤浜嗭紝鍥犳錛岃兘澶熶嬌鐢ㄧ殑鍙湁鍙鎬у壀鏋濓紝鑰屾湰棰樼殑鏁版嵁鑼冨洿浣垮緱榪欑綆楁硶蹇呯劧TLE銆?br />
姝hВ鏄竴縐嶇敱榪唬鍔犳繁鎬濇兂鎵╁睍寰楀埌鐨?#8220;榪唬鍙樹紭”DFS銆傝緗竴涓礬寰勯暱搴︿笂闄怹錛屾悳绱鍒皌鐨勬墍鏈夌畝鍗曡礬錛屽湪鎼滅儲榪囩▼涓紝閬囧埌闀垮害澶т簬Z鐨勮礬寰勫氨鍋滄錛堝壀鏋濓級錛岀劧鍚庯紝鑻ュ緱鍒拌礬寰勪笉瓚矺鏉★紝鍒欏鍔燴鐨勫鹼紝閲嶆柊寮濮嬫悳绱紝鐩村埌寰楀埌鐨勮礬寰勬繪暟澶т簬絳変簬K鏉′負姝€傝繖閲屽彲浠ヨ繘琛屽惎鍙戝紡鐨勪紭鍖栵紝璁緂[i]涓虹偣i鍒皌鐨勬渶鐭礬闀垮害錛屽垯鎼滅儲榪囩▼涓紝鍋囪鐩墠鎼滃埌鐐筰錛屽垯錛堢洰鍓嶈礬寰勯暱搴?g[i]錛夋槸瀵規暣鏉¤礬寰勬渶鐭暱搴︾殑涔愯浼拌錛屽鏋滆繖涓艱秴榪囦簡Z錛屽氨鍙互鍓灊錛屼絾鍦ㄥ壀鏋濅箣鍓嶈璁頒笅榪欎釜瓚呰繃浜哯鐨勫惎鍙戝鹼紝鍙栧叾涓渶灝忕殑浣滀負涓嬩竴嬈¤凱浠g殑Z鍊箋傞偅涔堝浜庡瓧鍏稿簭鑲夸箞鍔烇紵鍙互鍦ㄦ悳绱㈣繃紼嬩腑錛屽己鍒跺厛鎼滅紪鍙峰皬鐨勭粨鐐癸紝榪欐牱寰楀埌鐨剆-t璺緞蹇呯劧鏄瓧鍏稿簭閫掑鐨勩傚彟澶栧彧瑕佹眰鍑虹K鏉¤礬寰勶紝鎼滅儲灝卞彲浠ョ粓姝紝鍥犱負瀹規槗璇佹槑錛岄鐩姹傜殑絎琄鐭殑璺緞涓瀹氬凡緇忔眰鍑烘潵浜嗭紙鍙笉榪囦笉涓瀹氭槸鏈鍚庝竴鏉¤屽凡錛夛紝鎵懼埌鍗沖彲銆傛澶栵紝鍦ㄦ悳绱㈣繃紼嬩腑涓嶈蹇樹簡鍙鎬у壀鏋濓紝灝辨槸濡傛灉娌跨洰鍓嶆悳鍒扮殑璺緞宸茬粡鍒頒笉浜唗浜嗭紝鍓灊銆?br />
“榪唬鍙樹紭”DFS錛屽氨鏄緗竴涓В鐨勮瘎浠峰肩殑涓婇檺錛堟渶灝忓鹼級鎴栦笅闄愶紙鏈澶у鹼級錛屽湪鎼滅儲榪囩▼涓紝濡傛灉瀹為檯璇勪環鍊鹼紙鎴栬呭惎鍙戝鹼紝濡傛灉鍙互鍔犲惎鍙戝紡浼樺寲鐨勮瘽錛夎秺榪囪繖涓檺鍒訛紝鍒欏壀鏋濄傚湪涓嬈℃悳绱㈠悗錛屽鏋滄病鏈夊緱鍒扮鍚堣姹傜殑瑙o紝灝卞皢璇ラ檺鍒跺?span style="color: red">璁句負鏈鎼滅儲榪囩▼涓秺鐣?#8220;瓚?#8221;寰楁渶榪戠殑閭d釜鍊?/strong>錛岄噸鏂板紑濮嬫悳绱紝鐩村埌鎵懼埌鎵闇瑕佺殑瑙f垨鑰?span style="color: red">鍙戠幇鏃犺В錛堝鏋滀竴嬈℃悳绱腑娌℃湁鍙戠敓瓚婄晫錛屽嵈浠嶇劧娌℃湁鎵懼埌瑙o級涓烘銆傚叾搴旂敤涓昏浣撶幇鍦ㄤ袱涓柟闈細錛?錛夋悳绱㈡爲榪囨繁鐢氳嚦鏃犻檺娣憋紝浣嗘墍闇姹傜殑閭d釜瑙e嵈涓嶆繁鐨勬儏鍐碉紱錛?錛夋眰絎琄浼樿В鐨勬儏鍐點?br />
浠g爜錛?
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
#include 
<algorithm>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
const int MAXN = 51, MAXK = 201, MAXM = 3000, INF = ~0U >> 2;
struct edge {
    
int a, b, w, pre, next;
} E[MAXM 
+ MAXN], E0[MAXM + MAXN];
struct edge0 {
    
int a, b, w;
    
bool operator< (edge0 e0) const {return b < e0.b;}
} _E[MAXM];
int n, m, s, t, K, dist[MAXN], Q[MAXN + 1];
int Z, Z0, vst0[MAXN], _FL, len0, X00[MAXN], No, len[MAXK], X0[MAXK][MAXN], sum0[MAXK], reslen, res[MAXN];
bool vst[MAXN], res_ex = 0;
void init_d()
{
    re(i, n) E[i].pre 
= E[i].next = E0[i].pre = E0[i].next = i; m = n;
}
void add_edge(int a, int b, int w)
{
    E[m].a 
= a; E[m].b = b; E[m].w = w; E[m].pre = E[a].pre; E[m].next = a; E[a].pre = m; E[E[m].pre].next = m;
    E0[m].a 
= b; E0[m].b = a; E0[m].w = w; E0[m].pre = E0[b].pre; E0[m].next = b; E0[b].pre = m; E0[E0[m].pre].next = m++;
}
void init()
{
    
int m0; scanf("%d%d%d%d%d"&n, &m0, &K, &s, &t); init_d(); s--; t--;
    re(i, m0) {scanf(
"%d%d%d"&_E[i].a, &_E[i].b, &_E[i].w); _E[i].a--; _E[i].b--;}
    sort(_E, _E 
+ m0);
    re(i, m0) add_edge(_E[i].a, _E[i].b, _E[i].w);
}
void prepare()
{
    re(i, n) {vst[i] 
= 0; dist[i] = INF;} vst[t] = 1; dist[t] = 0; Q[0= t;
    
int x, y, d0, d1;
    
for (int front=0, rear=0!(!front && rear==|| front==rear+1); front==? front=0 : front++) {
        x 
= Q[front]; d0 = dist[x];
        
for (int p=E0[x].next; p != x; p=E0[p].next) {
            y 
= E0[p].b; d1 = d0 + E0[p].w;
            
if (d1 < dist[y]) {
                dist[y] 
= d1;
                
if (!vst[y]) {vst[y] = 1; Q[rear==? rear=0 : ++rear] = y;}
            }
        }
        vst[x] 
= 0;
    }
}
void dfs(int x, int sum)
{
    
if (x == t) {
        
if (sum <= Z) {sum0[No] = sum; len[No] = len0; re(i, len0) X0[No][i] = X00[i]; No++if (No == K) res_ex = 1;}
        
else if (sum < Z0) Z0 = sum;
        
return;
    } 
else {
        
int h0 = sum + dist[x];
        
if (h0 > Z) {if (h0 < Z0) Z0 = h0; return;}
        vst0[x] 
= ++_FL; Q[0= x; int _x, _y;
        
for (int front=0, rear=0; front<=rear; front++) {
            _x 
= Q[front];
            
for (int p=E[_x].next; p != _x; p=E[p].next) {
                _y 
= E[p].b;
                
if (!vst[_y] && vst0[_y] != _FL) {vst0[_y] = _FL; Q[++rear] = _y;}
            }
        }
        
if (vst0[t] != _FL) return;
        
for (int p=E[x].next; p != x; p=E[p].next) {
            _y 
= E[p].b;
            
if (!vst[_y]) {vst[_y] = 1; X00[len0++= _y; dfs(_y, sum + E[p].w); if (res_ex) returnelse {len0--; vst[_y] = 0;}}
        }
    }
}
void solve()
{
    Z 
= dist[s]; int No0 = 0; _FL = 0;
    
while (1) {
        Z0 
= INF; No = 0; re(i, n) {vst[i] = 0; vst0[i] = 0;}
        vst[s] 
= 1; len0 = 1; X00[0= s; dfs(s, 0);
        
if (res_ex) {
            No0 
= K - No0;
            re(i, K) 
if (sum0[i] == Z) {No0--if (!No0) {reslen = len[i]; re(j, len[i]) res[j] = X0[i][j];}}
            
break;
        } 
else if (Z0 == INF) breakelse {No0 = No; Z = Z0;}
    }
}
void pri()
{
    
if (res_ex) {
        printf(
"%d", res[0+ 1);
        re2(i, 
1, reslen) printf("-%d", res[i] + 1);
        puts(
"");
    } 
else puts("No");
}
int main()
{
    init();
    prepare();
    solve();
    pri();
    
return 0;
}




Mato_No1 2012-09-23 14:28 鍙戣〃璇勮
]]>
銆怉HOI2013澶嶄粐銆戜袱閬揕IS妯″瀷棰樻葷粨http://www.shnenglu.com/MatoNo1/archive/2012/09/08/189969.htmlMato_No1Mato_No1Sat, 08 Sep 2012 12:40:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/09/08/189969.htmlhttp://www.shnenglu.com/MatoNo1/comments/189969.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/09/08/189969.html#Feedback1http://www.shnenglu.com/MatoNo1/comments/commentRss/189969.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/189969.html銆?銆?a title="[HAOI2007]涓婂崌搴忓垪 " >[HAOI2007]涓婂崌搴忓垪
棰勫鐞嗭細璁綟[i]涓轟互i寮澶寸殑鏈闀夸笂鍗囧簭鍒楃殑闀垮害錛屾庝箞姹備笉鐢ㄨ浜嗗惂鍥?#8230;…
鍋囪鐩墠闇瑕佹眰闀垮害涓篗鐨勩佹爣鍙峰瓧鍏稿簭鏈灝忕殑涓婂崌搴忓垪錛屾樉鐒跺叾絎竴涓厓绱燗[i]蹇呴』婊¤凍F[i]>=M錛堟敞鎰忥紝涓嶆槸絳変簬錛屾槸澶т簬絳変簬錛侊級錛屾壘鍒版弧瓚寵繖涓潯浠剁殑鏈灝忕殑i鍗沖彲銆傜劧鍚庯紝璁劇洰鍓嶅凡緇忔眰鍑轟簡璇ュ簭鍒楃殑絎瑇涓厓绱犱負A[y]錛屽垯絎?x+1)涓厓绱燗[z]闇瑕佹弧瓚崇殑鏉′歡鏄疉[z]>A[y]錛屼笖F[z]=F[y]-1錛屾壘鍒版弧瓚寵繖涓潯浠剁殑鏈灝忕殑z鍗充負璇ュ簭鍒楃殑絎?x+1)涓厓绱犮傛寜鐓ц繖縐嶆柟娉曪紝鎵弿涓閬嶅氨鍙互姹傚嚭鏁翠釜搴忓垪錛屾椂闂村鏉傚害涓篛(N)銆傚鏋滄暣涓簭鍒楃殑鏈闀夸笂鍗囧簭鍒楅暱搴?lt;M錛屽垯鏃犺В銆?br />
浠g爜錛?
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
#define ll long long
const int MAXN = 10010,    MAXM = 1010, INF = ~0U >> 2;
int n, m, len, A[MAXN], F[MAXN], D[MAXN], res[MAXM];
void prepare()
{
    D[len 
= 0= INF; int l, r, mid;
    rre(i, n) 
if (A[i] < D[len]) D[F[i] = ++len] = A[i]; else {
        l 
= 0; r = len;
        
while (l < r) {
            mid 
= l + r + 1 >> 1;
            
if (A[i] < D[mid]) l = mid; else r = mid - 1;
        }
        F[i] 
= l + 1; D[l + 1= A[i];
    }
}
void solve()
{
    
int x, y;
    re(i, n) 
if (F[i] >= m) {
        res[
0= A[i]; if (m == 1return; x = m - 1; y = 1;
        re2(j, i
+1, n) if (F[j] >= x && A[j] > res[y - 1]) {res[y++= A[j]; if (y == m) returnelse x--;}
    }
}
int main()
{
    scanf(
"%d"&n); re(i, n) scanf("%d"&A[i]);
    prepare();
    
int m_s; scanf("%d"&m_s);
    re(i, m_s) {scanf(
"%d"&m); if (m > len) puts("Impossible"); else {solve(); re(j, m-1) printf("%d ", res[j]); printf("%d\n", res[m - 1]);}}
    
return 0;
}


銆?銆?a title="[HAOI2006]鏁板瓧搴忓垪 " >[HAOI2006]鏁板瓧搴忓垪
棣栧厛錛岀敱浜庡簭鍒楃殑鎵鏈夊厓绱犻兘鏄暣鏁幫紝鎵浠ュ彲浠ュ皢鍘熷簭鍒楃殑鎵鏈夊厓绱犲噺鍘誨畠鐨勪笅鏍囷紝榪欐牱灝辨妸涓婂崌搴忓垪杞寲涓轟笉涓嬮檷搴忓垪浜嗐?br />絎竴闂殑緇撴灉鏄劇劧灝辨槸(N-鏂板簭鍒楃殑鏈闀夸笉涓嬮檷搴忓垪闀垮害)銆傚叧閿湪浜庣浜岄棶銆備互涓婣鍧囪〃紺烘柊搴忓垪銆?br />璁綟[i]涓轟互A[i]緇撳熬鐨勬渶闀夸笉涓嬮檷搴忓垪闀垮害錛堝悓鏍鳳紝姹傛硶涓嶇敤璇翠簡錛夛紝G[i]涓哄湪A[i]涓嶄慨鏀圭殑鍓嶆彁涓嬪皢A[0..i]杞彉涓轟笉涓嬮檷搴忓垪鐨勬渶灝忎慨鏀歸噺銆傞鍏堟眰鍑篎[i]錛岀劧鍚庡湪姹侴[i]鏃訛紝鏋氫婦涓婁竴涓?#8220;涓嶅姩鐐?#8221;錛堝氨鏄笉淇敼鐨勫厓绱狅級A[j]錛堟樉鐒跺繀欏繪弧瓚矨[j]<=A[i]涓擣[j]=F[i]-1錛夛紝榪欐牱鏈灝忎慨鏀歸噺灝辨槸G[j]+(灝咥[j..i]杞彉涓轟笉涓嬮檷搴忓垪鐨勬渶灝忎慨鏀歸噺錛夈傚彲浠ヨ瘉鏄庯紝A[j..i]鐨勬渶浼樹慨鏀規柟妗堝繀鐒舵槸灝咥[j+1..t]鍏ㄩ儴淇敼涓篈[j]錛孉[t+1..i]鍏ㄩ儴淇敼涓篈[i]錛岃繖閲宼鏄竴涓猍j..i]鑼冨洿鐨勫箋傞棶棰樺氨鏄浣曟眰鍑烘渶浼樼殑t錛?br />涓寮濮嬶紝鍋囪t=j錛屽嵆鎶夾[j+1..i-1]鍏ㄩ儴淇敼涓篈[i]錛岃綆楀嚭淇敼閲忥紝璁句負S銆傜劧鍚庯紝鐢變簬A[j+1..i-1]涔嬮棿鐨勫厓绱犺涔堝皬浜嶢[j]錛岃涔堝ぇ浜嶢[i]錛堣繖涓槸鏄劇劧鐨勫洤錛夛紝鎴戜滑鎶婂皬浜嶢[j]鐨勫厓绱犵О涓?#8220;灝忔暟”錛屾妸澶т簬A[i]鐨勫厓绱犵О涓?#8220;澶ф暟”錛屽垯褰搕鍙杢0鏃訛紝淇敼閲忎負S-(A[i]-A[j])*(A[j+1..t0]涓殑“灝忔暟”涓暟鍑忓幓“澶ф暟”涓暟錛夈傝繖鏍鳳紝鍙渶鎵弿涓涓嬶紝姹傚嚭浣垮緱(A[j+1..t0]涓殑“灝忔暟”涓暟鍑忓幓“澶ф暟”涓暟錛夊兼渶澶х殑t0鍗沖彲銆?br />褰撶劧榪樻湁涓涓棶棰橈紝瀵逛簬鍚屼竴涓猧錛屾弧瓚?#8220;A[j]<=A[i]涓擣[j]=F[i]-1”鐨勫厓绱犱釜鏁板彲鑳芥湁寰堝錛屽鏋滀竴涓竴涓灇涓撅紝涓涓竴涓壂鎻忥紝浼氬緢鎱㈢殑鍥?#8230;…瑙e喅鏂規硶鏄紝姹傚嚭婊¤凍榪欎釜鏉′歡鐨刯涓渶灝忕殑涓涓紝璁句負j0錛岀劧鍚庢妸A[j0+1..i-1]涓殑鎵鏈?#8220;灝忔暟”鍜?#8220;澶ф暟”鍏ㄩ儴澶勭悊鍑烘潵錛岀劧鍚庣敤綾諱技鍓嶇紑鍜岀殑鏂規硶灝辮兘鎼炰簡鍥?#8230;…褰撶劧錛屼負浜嗘壘鍒癹0錛岄渶瑕佸緩涓涓簩鍒嗗浘錛岃竟涓?F[i], i)銆?br />鏈鍚庯紝涓轟簡鏂逛究錛屽彲浠ユ妸A搴忓垪鐨勫乏杈瑰姞涓涓?INF錛屽彸杈瑰姞涓涓?INF銆傛渶鍚庢葷殑鏃墮棿澶嶆潅搴︼紝鐞嗚涓婁負O(N2)錛屼絾鐢變簬鏄殢鏈烘暟鎹紝鎵浠ヨ繙榪滆揪涓嶅埌榪欎釜綰у埆銆?br />
浠g爜錛?
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
#define ll long long
const int MAXN = 40010, INF = ~0U >> 2;
struct edge {
    
int a, b, pre, next;
} E[MAXN 
<< 1];
int n, m, A[MAXN], D[MAXN], F[MAXN], W[MAXN], res1;
ll G[MAXN], res2;
void init_d()
{
    re(i, n) E[i].pre 
= E[i].next = i; m = n;
}
void add_edge(int a, int b)
{
    E[m].a 
= a; E[m].b = b; E[m].pre = E[a].pre; E[m].next = a; E[a].pre = m; E[E[m].pre].next = m++;
}
void init()
{
    scanf(
"%d"&n);
    A[
0= -INF; re1(i, n) {scanf("%d"&A[i]); A[i] -= i;} A[++n] = INF; n++;
}
void solve()
{
    init_d(); F[
0= 0; G[0= 0; D[0= -INF; add_edge(00); int len = 0, l, r, mid, x, maxw; ll sum, tmp;
    re2(i, 
1, n) {
        
if (A[i] >= D[len]) D[F[i] = ++len] = A[i]; else {
            l 
= 0; r = len;
            
while (l < r) {
                mid 
= l + r + 1 >> 1;
                
if (A[i] >= D[mid]) l = mid; else r = mid - 1;
            }
            D[F[i] 
= ++l] = A[i];
        }
        
for (int p=E[F[i]-1].next; ; p=E[p].next) if (A[i] >= A[x = E[p].b]) break;
        W[x] 
= 0; re2(j, x+1, i) if (A[j] < A[i]) W[j] = W[j - 1+ 1else W[j] = W[j - 1- 1;
        sum 
= 0; maxw = -INF; G[i] = ~0Ull >> 2;
        rre2(j, i, x) {
            
if (A[j] <= A[i] && F[j] == F[i] - 1) {
                tmp 
= G[j] + sum; if (tmp < G[i]) G[i] = tmp;
                tmp 
= G[j] + sum - (ll) (maxw - W[j]) * (A[i] - A[j]); if (tmp < G[i]) G[i] = tmp;
            }
            
if (A[j] > A[i]) sum += A[j] - A[i]; else sum += A[i] - A[j];
            
if (W[j] > maxw) maxw = W[j];
        }
        add_edge(F[i], i);
    }
    res1 
= n - F[n - 1- 1; res2 = G[n - 1];
}
void pri()
{
    cout 
<< res1 << endl << res2 << endl;
}
int main()
{
    init();
    solve();
    pri();
    
return 0;
}




Mato_No1 2012-09-08 20:40 鍙戣〃璇勮
]]>
銆怉HOI2013澶嶄粐銆慫JOI2008 楠戝+ 棰樿Вhttp://www.shnenglu.com/MatoNo1/archive/2012/09/01/189006.htmlMato_No1Mato_No1Sat, 01 Sep 2012 09:03:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/09/01/189006.htmlhttp://www.shnenglu.com/MatoNo1/comments/189006.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/09/01/189006.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/189006.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/189006.html鍘熼鍦板潃
鏈矙鑼剁殑絎竴涓棤鍚戠幆濂楁爲妯″瀷錛岀邯蹇典竴涓?#8230;…

鐜鏍戯紝鎸囩殑鏄瘡涓繛閫氬潡涓偣鏁伴兘絳変簬杈規暟鐨勬棤鍚戝浘錛堢О涓烘棤鍚戠幆濂楁爲錛夋垨鑰呮槸姣忎釜鐐規湁涓斿彧鏈変竴涓墠瓚嬶紙縐頒負鍐呭悜鐜鏍戯級鎴栧悗緇э紙縐頒負澶栧悜鐜鏍戯級鐨勬湁鍚戝浘錛岀敱浜庤繖涓浘鐨勬瘡涓繛閫氬潡褰撲腑鏈変笖鍙湁涓涓幆錛堟敞鎰忥紝鍙兘鏄嚜鐜紝鍗抽暱搴︿負1鐨勭幆錛夛紝涓旇繖涓幆涓婄殑姣忎釜鐐歸兘鍙互褰撲綔鏍瑰紩鍑轟竴媯墊爲錛屾墍浠ュ彨“鐜鏍?#8221;銆?br />
瀵逛簬鏃犲悜鐜鏍戯紝鍏堝皢鏁翠釜鍥捐繘琛屼竴嬈FS錛屽綋涓鏋滃彂鐜版湁閫嗗悜杈癸紙榪欐潯杈圭涓嬈¤鍙戠幇蹇呯劧鏄綔涓洪嗗悜杈圭殑錛屼篃灝辨槸璧風偣鏄粓鐐圭殑鍚庝唬錛夛紝灝辮鏄庢壘鍒頒簡榪欎釜鐜紝璁板綍鍏惰搗鐐瑰拰緇堢偣錛堟敞鎰忥紝濡傛灉鏈夊涓繛閫氬潡鐨勮瘽錛屼笉鑳介鍑猴紝瑕佺戶緇亶鍘嗗畬錛夛紝鍐嶄笉鏂笂婧紙鍥犳鍦―FS榪囩▼涓綋鐒惰璁板綍鐖惰竟浜嗗洤錛夛紝灝卞彲浠ユ壘鍒版暣涓幆浜嗭紝鐒跺悗鍐嶄互鐜笂鐨勭粨鐐逛負鏍瑰緩鏍戝嵆鍙紝榪欐牱渚濇澶勭悊姣忎釜榪為氬潡銆?br />
瀵逛簬鍐呭悜鐜鏍戯紙澶栧悜綾諱技錛夛紝鎵劇幆鏇翠負綆鍗曪紝鍙渶瑕佷換閫変竴涓偣錛屼笉鏂幓鎵懼畠鐨勫墠瓚嬶紝鍚屾椂璁板綍鎵懼埌鐨勭偣搴忓垪錛岀洿鍒版煇涓偣鍦ㄥ簭鍒椾腑鍑虹幇涓ゆ涓烘錛屾鏃惰繖涓偣浠ュ強搴忓垪涓畠涓ゆ鍑虹幇鐨勪綅緗腑闂寸殑鎵鏈夌偣錛屽氨鏄幆涓婄殑鐐癸紝欏哄簭涔熼『渚胯褰曚笅鏉ワ紝鐒跺悗鏍戜篃涓嶇敤寤轟簡錛岀洿鎺ュ湪鍘熷浘涓壘灝辮浜嗐?br />
瀵逛簬榪欓錛岀敱浜庢瘡涓偣閮芥湁涓斿彧鏈変竴涓悗緇э紝鎵浠ユ槸澶栧悜鐜鏍戯紝涓嶈繃鏈矙鑼舵洿鍊懼悜浜庡畠鐨勫熀鍥撅紙鏃犲悜鍥撅紝鏄棤鍚戠幆濂楁爲錛夛紝鐒跺悗灝辨槸涓涓狣P浜嗗洤……

浠g爜錛?
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
#define ll long long
const int MAXN = 1000010;
const ll INF = ~0Ull >> 2;
struct edge {
    
int a, b, pre, next;
} E0[MAXN 
* 3], E[MAXN << 1];
int n, m0, m, A[MAXN], stk[MAXN], st[MAXN], pr[MAXN], Q[MAXN];
ll F[MAXN][
2], res = 0;
bool vst[MAXN], vst0[MAXN];
void init_d()
{
    re(i, n) E0[i].pre 
= E0[i].next = E[i].pre = E[i].next = i; if (n & 1) m0 = n + 1else m0 = n; m = n;
}
void add_edge0(int a, int b)
{
    E0[m0].a 
= a; E0[m0].b = b; E0[m0].pre = E0[a].pre; E0[m0].next = a; E0[a].pre = m0; E0[E0[m0].pre].next = m0++;
    E0[m0].a 
= b; E0[m0].b = a; E0[m0].pre = E0[b].pre; E0[m0].next = b; E0[b].pre = m0; E0[E0[m0].pre].next = m0++;
}
void add_edge(int a, int b)
{
    E[m].a 
= a; E[m].b = b; E[m].pre = E[a].pre; E[m].next = a; E[a].pre = m; E[E[m].pre].next = m++;
}
void init()
{
    scanf(
"%d"&n); int x; init_d();
    re(i, n) {
        scanf(
"%d%d"&A[i], &x); add_edge0(--x, i);
    }
}
void sol0(int x)
{
    Q[
0= x; int i, j, front, rear;
    
for (front=0, rear=0; front<=rear; front++) {
        i 
= Q[front];
        
for (int p=E0[i].next; p != i; p=E0[p].next) {
            j 
= E0[p].b;
            
if (!vst0[j]) {Q[++rear] = j; vst0[j] = 1; add_edge(i, j);}
        }
    }
    rre3(z, rear, 
0) {
        i 
= Q[z];
        F[i][
0= 0; F[i][1= A[i];
        
for (int p=E[i].next; p != i; p=E[p].next) {
            j 
= E[p].b; F[i][0+= F[j][0>= F[j][1? F[j][0] : F[j][1]; F[i][1+= F[j][0];
        }
    }
}
void solve()
{
    re(i, n) {vst[i] 
= vst0[i] = 0; st[i] = E0[i].next;} int x, y, tp, x0, y0; bool FF, FF2; ll tmp0, tmp1, tmp00, tmp01, res0;
    re(i, n) 
if (!vst[i]) {
        stk[tp 
= 0= i; vst[i] = 1; FF2 = 0;
        
while (tp >= 0) {
            x 
= stk[tp]; FF = 0;
            
for (int p=st[x]; p != x; p=E0[p].next) {
                y 
= E0[p].b;
                
if (!vst[y]) {vst[y] = 1; stk[++tp] = y; pr[y] = p; st[x] = E0[p].next; FF = 1break;}
                
else if (p != (pr[x] ^ 1&& !FF2) {FF2 = 1; x0 = x; y0 = y;}
            }
            
if (!FF) tp--;
        }
        
if (FF2) {
            tp 
= 0; vst0[y0] = 1while (x0 != y0) {stk[tp++= x0; vst0[x0] = 1; x0 = E0[pr[x0]].a;} stk[tp++= y0;
            re(j, tp) sol0(stk[j]);
            tmp0 
= F[stk[0]][0]; tmp1 = -INF;
            re2(j, 
1, tp) {
                tmp00 
= (tmp0 >= tmp1 ? tmp0 : tmp1) + F[stk[j]][0];
                tmp01 
= tmp0 + F[stk[j]][1];
                tmp0 
= tmp00; tmp1 = tmp01;
            }
            res0 
= tmp0 >= tmp1 ? tmp0 : tmp1;
            tmp0 
= -INF; tmp1 = F[stk[0]][1];
            re2(j, 
1, tp) {
                tmp00 
= (tmp0 >= tmp1 ? tmp0 : tmp1) + F[stk[j]][0];
                tmp01 
= tmp0 + F[stk[j]][1];
                tmp0 
= tmp00; tmp1 = tmp01;
            }
            res 
+= res0 >= tmp0 ? res0 : tmp0;
        }
    }
}
void pri()
{
    cout 
<< res << endl;
}
int main()
{
    init();
    solve();
    pri();
    
return 0;
}




Mato_No1 2012-09-01 17:03 鍙戣〃璇勮
]]>
XOR涓撻錛堜竴錛夛細寮傛垨鏂圭▼緇勭殑瑙f硶http://www.shnenglu.com/MatoNo1/archive/2012/05/20/175404.htmlMato_No1Mato_No1Sun, 20 May 2012 02:17:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/05/20/175404.htmlhttp://www.shnenglu.com/MatoNo1/comments/175404.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/05/20/175404.html#Feedback3http://www.shnenglu.com/MatoNo1/comments/commentRss/175404.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/175404.html闃呰鍏ㄦ枃

Mato_No1 2012-05-20 10:17 鍙戣〃璇勮
]]>
鐐叺闃靛湴浠ュ強涓庡叾鐩稿叧鐨勪竴綾葷姸鍘婦P闂http://www.shnenglu.com/MatoNo1/archive/2012/03/10/167626.htmlMato_No1Mato_No1Sat, 10 Mar 2012 15:27:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/03/10/167626.htmlhttp://www.shnenglu.com/MatoNo1/comments/167626.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/03/10/167626.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/167626.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/167626.html鍘熼鍦板潃
璇村疄璇濇垜絎竴嬈″皾璇曞啓鐐叺闃靛湴鏄湪2009騫?#8230;…宸茬粡榪囧幓涓ゅ勾澶氫簡錛岀粓浜庢壘鍒頒簡涓涓ソ鐨勮В娉?#8230;…搴嗙涓涓?#8230;…

銆愮姸鎬佸帇緙〥P銆?br />鎵璋撶姸鎬佸帇緙〥P錛屽氨鏄浜庢煇浜汥P闂錛屾瘡涓闃舵鐨勭姸鎬侀兘鏈夊緢澶氱淮錛岃鍒╃敤鏌愪簺鎵嬫灝嗗畠浠帇緙╁埌涓緇達紙涓涓鏁存暟錛夛紝欏轟究榪涜鐘舵佺殑綺劇畝錛堝幓鎺変笉鍚堟硶鐨勭姸鎬侊級錛岀劧鍚庡啀榪涜DP銆傝繖閲岃鐨勪富瑕佹槸浼犵粺鐨勭姸鍘婦P錛屾湁涓縐嶅熀浜?#8220;鎻掑ご”鐨凞P錛屾洿楂樼駭錛屼互鍚庡啀鎼炪?br />瀵逛簬鏈錛屽彲浠ヨ璁″嚭涓涓繖鏍風殑鐘舵侊細[0..1][0..1][0..1]...[0..1]錛堟湁M涓猍0..1]錛夛紝琛ㄧず璇ヨ鐨勬瘡涓牸瀛愭斁涓嶆斁鐐叺錛屽鏋滄斁錛屼負1錛屽惁鍒欎負0銆傛樉鐒訛紝榪欐槸涓涓狹浣嶄簩榪涘埗鏁幫紝濡傛灉鑳芥妸瀹冧滑鍘嬬緝鎴愪竴涓猧nt灝卞ソ浜嗐?br />
銆愬浣曞帇緙┿?br />絎竴涓棶棰樻槸榪欎箞澶氱淮鐨勭姸鎬佸浣曞帇緙╃殑闂銆?br />瀵逛簬鏈錛岀敱浜庢槸浜岃繘鍒舵暟錛岀洿鎺ュ帇緙╁氨鍙互浜嗐備絾鏄浜庢煇浜涙儏鍐碉紝鐘舵佹槸涓笁榪涘埗鏁幫紙姣忎釜鏍煎瓙鐨勫睘鎬ч兘鏈?縐嶏級鐢氳嚦鏇村榪涘埗鏁幫紝榪欐牱錛岀洿鎺ュ帇緙╀細瀵艱嚧鏃犳硶浣跨敤浣嶈繍綆楋紝浠庤屼嬌“瑙e帇”鍙樺緱寰堥夯鐑︼紝鑰楁椂涔熷緢闀匡紙闇瑕佹毚鍔涳級錛屽洜姝わ紝鍙互灝嗘瘡浣嶄笁榪涘埗閮芥媶鎴愪袱浣嶄簩榪涘埗錛?br />0->00
1->01
2->10
錛堝綋鐒?鎷嗘垚10銆?鎷嗘垚11涔熸湪鏈夐棶棰橈紝鍙鑳藉尯鍒嗗紑灝辮浜嗭級
榪欐牱錛屾瘡涓姸鎬佸氨鍙互鐢?涓簩榪涘埗鏁版潵琛ㄧず錛屽彲浠ュ湪鏋勯犲嚭鎵鏈夊悎娉曠姸鎬佷互鍚庡皢姣忎釜鐘舵佹墍瀵瑰簲鐨勪袱浣嶄簩榪涘埗鏁板瓨鍒皊truct閲岄潰錛屼嬌鐢ㄦ椂璋冨嚭鍗沖彲銆?br />
銆愬浣曠簿綆銆?br />榪欎釜闂鏄渶閲嶈鐨勶紝鍥犱負錛屽鏋滀笉綺劇畝錛屽湪鏋氫婦鐘舵佷互鍙婅漿縐葷殑鏃跺欏氨浼氭灇涓懼埌寰堝涓嶅悎娉曠姸鎬侊紝瀵艱嚧鏃墮棿嫻垂銆?br />鎵璋撶簿綆錛屾槸鎸囧湪棰勫鐞嗕互鍙奃P榪囩▼涓紝灝介噺閬垮紑涓嶅悎娉曠姸鎬併?br />錛?錛夐澶勭悊涓殑綺劇畝錛?br />鍖呮嫭3涓儴鍒嗭細
<1>鎵懼埌鎵鏈夊彲鑳界殑鍚堟硶鐘舵佸茍緙栧彿錛氭牴鎹鎰忛檺鍒訛紝鏈夌殑鐘舵佸湪闃舵鍐呭氨涓嶅悎娉曪紙姣斿鏈錛屼竴琛屼竴闃舵錛岄偅涔堝嚒鏄湁涓や釜1浣嶇殑璺濈灝忎簬2鐨勭姸鎬侀兘涓嶅悎娉曪級錛岃屼笖榪欑鐘舵佹墍鍗犵殑姣旈噸寰寰榪樺緢澶э紙鏈涓紝M=10鏃訛紝涔熷彧鏈?0縐嶅彲鑳界殑鍚堟硶鐘舵侊級錛屾鏃訛紝涓轟簡鎵懼埌榪欎簺鍚堟硶鐘舵侊紝鍙互DFS鏋勯犲疄鐜般?br />闇瑕佹敞鎰忕殑鏄紝鏈夌殑棰樹笉鍏夎鎵懼埌涓涓樁孌靛唴鐨勫悎娉曠姸鎬侊紝榪樿鎵懼埌涓や釜鎴栦袱涓互涓婇樁孌靛唴鐨勫悎娉曠姸鎬侊紙姣斿閭d釜鏈夊叧澶氱背璇洪鐗岀殑棰橈級錛屾鏃墮渶瑕佷袱涓猧nt鍚屾椂DFS錛?br />鍦ㄦ壘鍒板悎娉曠姸鎬佷互鍚庯紝闇瑕佸姣忎釜鍚堟硶鐘舵佽繘琛岀紪鍙鳳紝浠ヨ揪鍒?#8220;鍘嬬緝”鐨勭洰鐨勩傝繖閲屽氨娑夊強鍒頒簡鐘舵佺紪鍙峰拰鐘舵佽〃紺虹殑闂錛氭瘮濡傦紝鐘舵?001錛岃〃紺轟負9錛屽湪DFS涓涓涓鎼滃埌錛屽洜姝ょ紪鍙蜂負0錛屼笉瑕佹悶娣蜂簡榪欎袱涓紙灝ゅ叾涓嶈鎼炴販“緙栧彿涓?”鍜?#8220;鐘舵佽〃紺轟負0”錛屽畠浠槸涓嶅悓鐨勶級銆傚湪棰勫鐞嗗拰DP鐨勮繃紼嬩腑錛屾墍鏈夋秹鍙婂埌鐘舵佺殑鏁扮粍涓嬫爣錛屽叏閮ㄦ槸緙栧彿鑰屼笉鏄〃紺猴紝鐭ラ亾緙栧彿瑕佹眰琛ㄧず錛屽彲浠ュ湪DFS涓褰曠殑鏁扮粍閲岄潰璋冿紝鑰岀煡閬撹〃紺鴻姹傜紪鍙鳳紝鍙互鍒╃敤閫嗘暟緇勬垨鑰呭搱甯岋紱
<2>鎵懼埌姣忎竴闃舵鐨勫悎娉曠姸鎬侊細鍗充嬌鏄?lt;1>涓鍒ゅ畾涓哄悎娉曠殑鐘舵侊紝鍦ㄥ叿浣撶殑鍚勪釜闃舵涓篃鏈繀鍚堟硶錛堟瘮濡傛湰棰橈紝濡傛灉鏌愪竴琛岀殑鏌愪竴涓綅緗槸'H'錛屼笉鑳芥斁錛岃屾煇涓涓姸鎬佸湪榪欓噷鏀句簡錛屽垯涓嶅悎娉曪級錛屽洜姝よ瀵規瘡涓樁孌靛啀鏋氫婦涓閬嶏紝鎵懼埌鐪熸鍚堟硶鐨勭姸鎬侊紝騫惰鍏ヤ竴涓獀ector錛?br /><3>鎵懼埌鐘舵佽漿縐諱腑鐨勫悎娉曠姸鎬侊細鍦ㄧ姸鎬佽漿縐諱腑錛屽線寰瑕佹眰鐘舵佷笉鍐茬獊錛堟瘮濡傛湰棰橈紝鍦ㄨ繛緇殑涓変釜闃舵涓紝閮戒笉鑳芥湁鏌愪竴浣嶆湁涓や釜涓?鐨勬儏鍐碉級錛屽洜姝わ紝榪樿鏋氫婦姣忎釜鐘舵佸湪杞Щ鏃朵笌鍏朵笉鍐茬獊鐨勭姸鎬侊紝騫惰鍏ector銆?br />娉ㄦ剰錛屾湁鏃跺欒繖涓姝ヤ笉鏄緢瀹規槗榪涜錛岄渶瑕佸湪DP榪囩▼涓繘琛岋紱
錛?錛塂P榪囩▼涓殑綺劇畝錛?br />DP榪囩▼涓紝鏋氫婦鐘舵併佽漿縐誨喅絳栭兘鍙灇涓懼悎娉曠殑錛屽湪vector閲岄潰璋冿紙娉ㄦ剰vector閲岃褰曠殑鍏ㄩ兘鏄姸鎬佺紪鍙瘋屼笉鏄〃紺猴紒錛夛紝鍙互澶уぇ鍑忓皯鏋氫婦閲忥紝涓嶈繃鏈夋椂鍊欙紝榪樹細鏈変竴浜涙椂闂存氮璐癸紝榪欐椂鍊欙紝鍙互閲囧彇涓浜涘叾瀹冪殑鍔炴硶鏉ョ簿綆錛屾瘮濡傚啀嬈¤繘琛孌FS鏋勯犲悎娉曠姸鎬佺瓑銆?br />
鎬諱箣錛岃繖綾婚棶棰樼殑鐩爣灝辨槸“綺劇畝錛岀簿綆錛屽啀綺劇畝錛屼嬌鏋氫婦鍒扮殑涓嶅悎娉曠姸鎬佸噺鍒版渶灝?#8221;銆?br />浠g爜錛?br />
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
#include 
<vector>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
#define pb push_back
#define IR iterator
typedef vector 
<int> vi;
const int MAXN = 103, MAXM = 11, MAXS = 100, INF = ~0U >> 2;
int n, m, S, A[MAXN], B[MAXS], T1[MAXS], F[MAXN][MAXS][MAXS], res;
bool F0[MAXN][MAXS];
vi P0[MAXN], P1[MAXS][MAXS];
void init()
{
     scanf(
"%d%d"&n, &m); getchar();
     re1(i, n) {A[i] 
= 0; re(j, m) A[i] |= ((getchar() == 'P'<< j); getchar();}
}
void dfs(int v, int ST)
{
    
if (v >= m) B[S++= ST; else {dfs(v + 3, ST | (1 << v)); dfs(v + 1, ST);}
}
void prepare()
{
    S 
= 0; dfs(00);
    re(i, S) {T1[i] 
= 0for (int j=B[i]; j; j-=j&(-j)) T1[i]++;}
    re1(i, n) re(j, S) 
if (!(~A[i] & B[j])) {P0[i].pb(j); F0[i][j] = 1;} P0[0].pb(S - 1); F0[0][S - 1= 1;
    re(i, S) re(j, S) 
if (!(B[i] & B[j])) re(k, S) if (!(B[i] & B[k]) && !(B[j] & B[k])) P1[i][j].pb(k);
}
void solve()
{
    re3(i, 
0, n) re(j1, S) re(j2, S) F[i][j1][j2] = -INF; F[0][S - 1][S - 1= 0;
    vi::IR vi_e0, vi_e1, vi_e2; 
int j0, j1, k, V;
    re(i, n) {
        vi_e0 
= P0[i].end(); if (i) vi_e1 = P0[i - 1].end(); else vi_e1 = P0[i].end();
        
for (vi::IR p=P0[i].begin(); p != vi_e0; p++)
            
for (vi::IR p_=P0[i ? i - 1 : i].begin(); p_ != vi_e1; p_++) {
                j0 
= *p; j1 = *p_;
                
if (!(B[j0] & B[j1])) {
                    vi_e2 
= P1[j0][j1].end();
                    
for (vi::IR p__ = P1[j0][j1].begin(); p__ != vi_e2; p__++) {
                        k 
= *p__;
                        
if (F0[i + 1][k]) {
                            V 
= F[i][j0][j1] + T1[k];
                            
if (V > F[i + 1][k][j0]) F[i + 1][k][j0] = V;
                        }
                    }
                }
            }
    }
    res 
= 0; re(i, S) re(j, S) if (F[n][i][j] > res) res = F[n][i][j];
}
void pri()
{
     printf(
"%d\n", res);
}
int main()
{
    init();
    prepare();
    solve();
    pri();
    
return 0;
}


Mato_No1 2012-03-10 23:27 鍙戣〃璇勮
]]>
綰挎鏍戞搷浣滄瀬鍝侀鈥斺擧DU2871http://www.shnenglu.com/MatoNo1/archive/2011/12/18/162313.htmlMato_No1Mato_No1Sun, 18 Dec 2011 00:58:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2011/12/18/162313.htmlhttp://www.shnenglu.com/MatoNo1/comments/162313.htmlhttp://www.shnenglu.com/MatoNo1/archive/2011/12/18/162313.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/162313.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/162313.html鍘熼鍦板潃
榪欐槸涓閬撶嚎孌墊爲鎿嶄綔鐨勬瀬鍝侀錛屽洜涓哄畠鐨?涓搷浣滃垰濂借鐩栦簡綰挎鏍戞搷浣滈棶棰樼殑3縐嶅鐞嗘濊礬錛屽彲浠ヨ鏄妸綰挎鏍戞搷浣滅殑鍏ㄩ儴鍐呭閮藉寘鍚繘鍘諱簡銆?br />
綰挎鏍戞槸涓縐嶉潤鎬佺殑鏁版嵁緇撴瀯錛屽洜涓轟竴媯電嚎孌墊爲涓鏃﹀緩鎴愶紝鍏跺艦鎬佸氨姘歌繙涓嶄細鍙戠敓鍙樺寲錛屾敼鍙樼殑浠呬粎鏄粨鐐逛笂璁板綍鐨勫悇縐嶄俊鎭殑鍊箋傚洜姝わ紝瀵逛簬綰挎鏍戞搷浣滐紝鏍稿績闂涔熷氨鏄浣曠淮鎶ゅ拰澶勭悊榪欎簺淇℃伅銆傛葷殑鏉ヨ錛屽浜庣嚎孌墊爲緇撶偣淇℃伅鐨勭淮鎶ゅ拰澶勭悊錛屾湁浠ヤ笅3縐嶅熀鏈濊礬錛?br />錛?錛夊乏鍙沖綊涓瀷錛?br />鎵璋撳乏鍙沖綊涓紝灝辨槸鐢ㄥ乏鍙沖瓙緇撶偣瀛樺偍鐨勪俊鎭潵寰楀埌鐖剁粨鐐瑰瓨鍌ㄧ殑淇℃伅鐨勫鹼紝榪欐槸鏈甯歌鐨勭嚎孌墊爲緇存姢鏂規硶銆備婦涓浜涚畝鍗曠殑渚嬪瓙錛氭瘮濡傜粨鐐圭殑SUM鍩熻〃紺鴻緇撶偣鍖洪棿涓婃墍鏈夊厓绱犵殑鍜岋紝閭d箞榪欎釜鍩熺淮鎶ょ殑鏂規硶灝辨槸“鐖剁粨鐐筍UM=宸﹀瓙緇撶偣SUM+鍙沖瓙緇撶偣SUM”錛屽啀姣斿緇撶偣鐨凪AX/MIN鍩熻〃紺鴻緇撶偣鍖洪棿涓婃墍鏈夊厓绱犵殑鏈澶?灝忓鹼紝閭d箞緇存姢鏂規硶灝辨槸“鐖剁粨鐐筂AX/MIN=max/min{宸﹀瓙緇撶偣MAX/MIN,鍙沖瓙緇撶偣MAX/MIN}”銆傝繖縐嶇淮鎶ゆ柟娉曚篃姣旇緝綆鍗曪紝鍙鍦ㄦ瘡嬈″瀛愮粨鐐硅繘琛屼慨鏀逛箣鍚巙pd涓涓嬪氨琛屼簡錛堝浜庨偅浜涜嚜欏跺悜涓嬮掑綊錛岃屼笖娑夊強鍒版敼鍊肩殑鎿嶄綔錛屽湪閫掑綊瀹屽乏鍙沖瓙緇撶偣鍚庝竴瀹氳璁板緱upd涓涓嬶級錛屽湪榪欎箣涓湁涓涓緢閲嶈鐨勬濇兂灝辨槸“宸﹀彸榪炵畫孌?#8221;鎬濇兂錛氬鏋滈鐩腑瑕佹眰浠繪剰涓涓尯闂村唴鐨勫叿鏈夋煇縐嶆ц川鐨勬渶闀跨殑榪炵畫搴忓垪錛堜篃灝辨槸瀛愬尯闂達級錛屾瘮濡傛渶闀胯繛緇笂鍗囧瓙搴忓垪銆?1鍊奸棶棰樹腑榪炵畫鐨?孌墊垨鑰呴潪0孌碉紙鍦ㄥ叿浣撻棶棰樹腑灝辨槸榪炵畫鐨勭┖闂叉鎴栬呭崰鐢ㄦ錛夌瓑錛屽彲浠ュ湪姣忎釜緇撶偣涓婄淮鎶や笁涓煙錛歭S銆乺S鍜孲錛屽垎鍒〃紺鴻緇撶偣鍖洪棿宸︾錛堜粠鍖洪棿鐨勬渶宸︾寮濮嬬殑錛夊叿鏈夎繖縐嶆ц川鐨勬渶闀胯繛緇簭鍒楃殑闀垮害錛岃緇撶偣鍖洪棿鍙崇錛堝埌鍖洪棿鐨勬渶鍙崇緇撴潫鐨勶級鍏鋒湁榪欑鎬ц川鐨勬渶闀胯繛緇簭鍒楃殑闀垮害鍜岃鍖洪棿鍐呭叿鏈夎繖縐嶆ц川鐨勬渶闀胯繛緇簭鍒楃殑闀垮害錛堜篃灝辨槸瑕佹眰鐨勯偅涓笢涓滐級錛屽垯緇存姢鏂規硶涓?#8220;鐖剁粨鐐筶S=宸﹀瓙緇撶偣lS錛堝乏瀛愮粨鐐筶S<宸﹀瓙緇撶偣len錛夋垨宸﹀瓙緇撶偣len+鍙沖瓙緇撶偣lS錛堝乏瀛愮粨鐐筶S=宸﹀瓙緇撶偣len錛夛紝鐖剁粨鐐箁S綾諱技錛岀埗緇撶偣S=max{宸﹀瓙緇撶偣S,鍙沖瓙緇撶偣S,宸﹀瓙緇撶偣rS+鍙沖瓙緇撶偣lS}”錛屾澶栵紝鐢變簬瑕佹眰鐨勮繖涓尯闂村彲鑳借鎷嗘垚澶氫釜榪炵畫鐨勭粨鐐瑰尯闂達紝鍥犳闇瑕佹寜欏哄簭鍚堝茍榪欎簺鍖洪棿錛屽悎騫剁殑鏂規硶鏄細璁劇珛S0鍜孲1錛孲0琛ㄧず涓嶄繚璇佽兘寤朵幾涓嬪幓鐨勫尯闂撮暱搴︼紝S0=涓婁竴涓尯闂寸殑S1+鏈尯闂寸殑lS錛汼1琛ㄧず鍙互寤朵幾涓嬪幓鐨勫尯闂撮暱搴︼紝S1=涓婁竴涓尯闂寸殑S1+鏈尯闂磍en錛堝鏋滄湰鍖洪棿鏁翠釜閮芥槸婊¤凍鏉′歡鐨勶紝鍗砈=len錛夋垨鏈尯闂寸殑rS錛堟湰鍖洪棿涓嶉兘鏄弧瓚蟲潯浠剁殑錛屽嵆S<len錛夛紝鍙栬繃紼嬩腑鎵鏈塖0鍜屽尯闂碨鐨勬渶澶у煎嵆涓虹粨鏋溿?br />鍦℉DU2871涓紝搴旂敤宸﹀彸褰掍腑鐨勬柟娉曠淮鎶ょ殑淇℃伅灝辨槸“鏈闀胯繛緇┖闂叉”鐨勯暱搴︼紝New鎿嶄綔闇瑕侊紱

錛?錛夎皟鏁磋竟鐣屽瀷錛?br />鑰冭檻榪欐牱涓涓棶棰橈細鐜板湪瑕佹彃鍏ャ佸垹闄や竴浜沎0, 100000)鐨勬暣鏁幫紝騫朵笖鍦ㄦ榪囩▼涓笉鏂闂K灝忕殑鏁存暟鏄灝戯紝鎬庝箞鍔烇紵騫寵 鏍戝彲浠ュ疄鐜幫紝浣嗙嚎孌墊爲鏄劇劧鏄洿濂界殑鏂規硶銆傚姣忎釜緇撶偣錛屽瓨鍌ㄤ竴涓狵0鍊艱〃紺轟綅浜庤緇撶偣鍖洪棿鍐呯殑鏁存暟鐨勪釜鏁幫紝鍒欐煡鎵劇K灝忕殑鏃跺欏彧闇瑕佷笉鏂墽琛屼互涓嬫搷浣滐細Kth(A, K)錛岃〃紺哄湪緇撶偣A浠h〃鐨勫尯闂村唴鎵劇K灝忕殑錛岀劧鍚庯紝鑻<=緇撶偣A鐨勫乏瀛愮粨鐐筀0鍊鹼紝鍒欐墽琛孠th(A鐨勫乏瀛愮粨鐐? K)錛屽惁鍒欐墽琛孠th(A鐨勫彸瀛愮粨鐐? K-A宸﹀瓙緇撶偣鐨凨0)錛堣繖鍜屽鉤琛℃爲紲炰技錛夛紝鐩村埌鎵懼埌鍙剁粨鐐逛負姝€傝繖縐嶆柟娉曠О涓?#8220;璋冩暣杈圭晫鍨?#8221;錛屽嵆闅忕潃緇撶偣娣卞叆錛屼笉鏂緝灝忥紙鑷《鍚戜笅錛夋垨鎵╁ぇ錛堣嚜搴曞悜涓婏級鑼冨洿錛屾渶鍚庢壘鍒扮粨鏋溿傚儚鎵劇K灝忚繖鏍風殑鎿嶄綔灞炰簬鑷《鍚戜笅鍨嬶紝鑰屽儚“鎵懼埌X鎵鍦ㄧ殑鍏鋒湁鏌愮鎬ц川鐨勬渶闀跨殑榪炵畫鍖洪棿”灝卞睘浜庤嚜搴曞悜涓婂瀷錛堟敞鎰忓拰鏈鐨凢ree涓嶄竴鏍鳳級錛?br />
錛?錛夋爣璁拌緟鍔╁瀷錛?br />榪欑緇存姢淇℃伅鐨勬柟娉曪紝鐗圭偣鏄埄鐢ㄦ爣璁版潵緇存姢淇℃伅錛屽嵆瀵逛簬鏌愪簺緇撶偣錛堜富瑕佹槸鍙剁粨鐐癸紝鍥犱負鍏舵爣璁頒笉鍐嶄笅鏀撅級錛岀洿鎺ヤ嬌鐢ㄦ爣璁版潵寰楀埌涓浜涙暟鎹紝姣斿瀵逛簬HDU2871榪欎竴棰橈紝鍏朵腑瀵逛簬鍙剁粨鐐逛綅浜庣殑鎻掑叆綰挎鐨勬爣鍙鳳紝浣跨敤鐨勫氨鏄爣璁般?br />
涓嬮潰鏄湰棰?涓搷浣滅殑鍏蜂綋瀹炵幇錛?br /><1>綰挎鏍戠粨鐐瑰畾涔夛細
鏈闇瑕佷袱媯電嚎孌墊爲錛岃繖鏄洜涓篘ew涓嶧ree鎿嶄綔瀵逛簬tot鍩燂紙鎻掑叆綰挎宸︾鐐圭殑鎬諱釜鏁幫級浼氶犳垚涓嶅悓鐨勫獎鍝嶏紝鍏蜂綋鏉ヨ錛屽湪New鎿嶄綔涓紝tot鍊間笉浼氳鍚屾椂鍔犱笂錛堥渶瑕佸彟澶栦竴涓搷浣滃姞涓婏級錛岀劧鑰屽湪Free鎿嶄綔涓紝tot鍊間細琚悓鏃舵竻絀猴紝榪欐牱灝變細瀵艱嚧鍦ㄥ鏌愪釜緇撶偣娓呯┖錛堣緇撶偣鍖呭惈鍦ㄦ煇涓狥ree鎿嶄綔瑕佹竻絀虹殑綰挎涓級騫舵墦涓?鏍囪涔嬪悗錛屽鏋滅揣鎺ョ潃鍙堟彃鍏ヤ竴鏉″寘鍚繖涓粨鐐瑰尯闂寸殑鏂扮嚎孌碉紝鍒欒繖涓粨鐐圭殑0鏍囪灝變細涓уけ錛岃繖鏍峰湪绱ф帴鐫涓嬩紶鐨勬椂鍊欙紝鍏跺瓙緇撶偣鐨則ot鍊煎氨涓嶄細琚竻絀猴紙浜嬪疄涓婂凡緇忚娓呯┖浜嗭級銆傛墍浠ワ紝灝唗ot鍩熷交搴曡漿縐誨埌鍙︿竴媯電嚎孌墊爲閲屻?
struct node {
    
int len, mr, lsc, rsc, sc;
} T[MAXN 
<< 2];
struct node0 {
    
int tot;
    
bool mr;
} T0[MAXN 
<< 2];
鍏朵腑lsc銆乺sc銆乻c灝辨槸榪炵畫絀洪棽孌電殑闀垮害錛堢敤宸﹀彸褰掍腑鐨勬柟娉曠淮鎶わ級錛宮r鏄竴涓暣浣撹祴鍊兼爣璁幫紝鍦═涓紝mr鐨勫艱嫢涓?1琛ㄧず鏃犳爣璁幫紙鏈鏁翠綋璧嬪鹼級錛岃嫢涓?琛ㄧず琚暣浣撴竻絀猴紝鑻ュぇ浜?琛ㄧず鏁翠綋琚竴鏉$嚎孌佃鐩栵紝mr鍊煎氨鏄繖鏉$嚎孌電殑緙栧彿錛堜負鍖哄垎涓嶅悓綰挎錛岃繖閲屾寜鐓ц緭鍏ラ『搴忓姣忎竴鏉ew鎿嶄綔鎻掑叆鐨勭嚎孌典互1銆?……緙栧彿錛夛紝鍦═0涓紝mr=1琛ㄧず鍦≧eset涓鏁翠綋娓呯┖錛宮r=0琛ㄧず鏃犳爣璁般?br /><2>鎿嶄綔澶勭悊錛?br />1)Reset鎿嶄綔錛氬皢T銆乀0鐨勬牴緇撶偣鎵撲笂娓呯┖鏍囪鍗沖彲錛?br />2)New錛氭秹鍙婂埌涓や釜鎿嶄綔錛屽垎鍒槸鎵炬渶宸︾殑闀垮害涓簒鐨勮繛緇┖闂叉錛屼互鍙婃彃鍏ヤ竴鏉$嚎孌點傚浜庡墠鑰咃紝鍙互鏍規嵁lsc銆乺sc銆乻c鐨勫鹼紝鎸夌収“鍏堝乏瀛愮粨鐐癸紝鍐嶈法瓚婁袱涓瓙緇撶偣錛屾渶鍚庡彸瀛愮粨鐐?#8221;鐨勯『搴忔眰寰楋紙璇﹁浠g爜錛夛紱瀵逛簬鍚庤呭氨涓嶇敤璇翠簡錛屽お瀹規槗瀹炵幇浜嗭紙娉ㄦ剰鏍囪鐨勫鐞嗕互鍙妘pd錛屽彟澶栬鎻掑叆涓涓猼ot錛夛紱
3)Free錛氫篃娑夊強涓や釜鎿嶄綔錛屽垎鍒槸鎵句竴涓偣x鎵鍦ㄧ殑綰挎錛堟彃鍏ヨ繃鐨勭嚎孌碉級闀垮害浠ュ強鍒犻櫎涓鏉$嚎孌碉紝瀵逛簬鍓嶈呭彲灝哊ew鎻掑叆榪囩殑鎵鏈夌嚎孌電殑宸﹀彸绔偣棰勫瓨璧鋒潵錛岀劧鍚庢壘鍒頒唬琛ㄥ尯闂碵x, x]鐨勭粨鐐圭殑mr鍊鹼紙涔熷氨鏄粨鐐箈琚紪鍙蜂負紲為┈鐨勭嚎孌佃鐩栵級錛屽啀鍦ㄩ瀛樼殑綰挎涓壘鍒板嵆鍙傚浜庡悗鑰咃紝鐩存帴娓呯┖鍗沖彲錛堜笉瑕佸湪T0涓墦鏍囪錛岃岃鍗曠嫭鍒犻櫎涓涓猼ot錛夛紱
4)Get錛氱洿鎺ュ埄鐢═0涓殑tot鎵懼埌絎琄灝忕殑鍊煎嵆鍙紱

浠g爜

Mato_No1 2011-12-18 08:58 鍙戣〃璇勮
]]>
鍒掑垎鏍?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/06/27/149604.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Mon, 27 Jun 2011 12:54:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/06/27/149604.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/149604.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/06/27/149604.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/149604.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/149604.html</trackback:ping><description><![CDATA[棣栧厛錛孫rz涓涓婣Hdoc紲炵妵錛屾湰娌欒尪鏄湅浠栫殑鎬葷粨鎵嶆悶鎳傚垝鍒嗘爲鐨勩?br /><a title="鍘熸枃鍦板潃" >鍘熸枃鍦板潃</a><br /><br />鍒掑垎鏍戯紝灝辨槸姣忎釜緇撶偣浠h〃涓涓簭鍒楋紝璁捐繖涓簭鍒楃殑闀垮害涓簂en錛岃嫢len>1錛屽垯搴忓垪涓墠len/2錛堜笂鍙栨暣錛岃繖閲屾暟瀛﹀叕寮忎笉濂芥墦錛岀湡鍥э級涓厓绱犺鍒嗗埌宸﹀瓙緇撶偣錛屽乏瀛愮粨鐐逛唬琛ㄧ殑搴忓垪灝辨槸榪欎簺鍏冪礌<span style="color: red"><strong>鎸夌収鏍圭粨鐐逛腑鐨勯『搴?/strong></span>緇勬垚鐨勫簭鍒楋紝鑰屽墿涓嬬殑鍏冪礌琚垎鍒板彸瀛愮粨鐐癸紝鍙沖瓙緇撶偣浠h〃鐨勫簭鍒椾篃灝辨槸鍓╀笅鐨勫厓绱犳寜鐓ф牴緇撶偣涓殑欏哄簭緇勬垚鐨勫簭鍒楋紱鑻en=1錛屽垯璇ョ粨鐐逛負鍙剁粨鐐廣傚垝鍒嗘爲鏈閲嶈鐨勫簲鐢ㄥ氨鏄壘鍖洪棿絎琄灝忥紙鍙槸鏌ユ壘錛屼笉鍖呮嫭淇敼錛夈?br /><br />鍐欏垝鍒嗘爲鏃朵富瑕佹湁涓や釜鍑芥暟錛氬緩鏍戝拰鎵懼尯闂寸K灝忋傜敱浜庡悗鑰匒Hdoc紲炵妵宸茬粡鎬葷粨浜嗭紝鎵浠ヨ繖閲屽彧鎬葷粨寤烘爲鐨勫嚱鏁般?br /><br />璁劇洰鍓嶇粨鐐逛負[l..r]錛坙<r錛屽氨鏄洰鍓嶇殑緇撶偣鏄師搴忓垪涓嶆柇鍒掑垎鍚庡緱鍒癧l..r]榪欎竴孌碉紝鍏跺疄涔熷氨鏄痑0[l..r]鎵撲貢欏哄簭鍚庡緱鍒扮殑錛宎0涓哄師搴忓垪閫掑鎺掑簭鍚庣殑搴忓垪錛夐鍏堟壘鍒頒腑鍊鹼紝灝辨槸a0[mid]錛宮id=l+r>>1銆傜劧鍚庡彲浠ュ緱鍒幫紝[l..r]涓皬浜庝腑鍊肩殑鐨勫厓绱犱竴瀹氳鍒掑垎鍒板乏瀛愮粨鐐癸紝[l..r]涓ぇ浜庝腑鍊肩殑鍏冪礌涓瀹氳鍒掑垎鍒板彸瀛愮粨鐐癸紝鑰孾l..r]涓瓑浜庝腑鍊肩殑鍏冪礌鍒欎笉紜畾錛屾湁鐨勮鍒掑垎鍒板乏瀛愮粨鐐癸紝鏈夌殑琚垝鍒嗗埌鍙沖瓙緇撶偣錛岃繖灝遍渶瑕佸厛鎵懼埌搴旇鍒掑垎鍒板乏瀛愮粨鐐圭殑絳変簬涓肩殑鍏冪礌涓暟sm錛堜粠mid寮濮嬩笉鏂線宸︼紝鐩村埌鎵懼埌杈圭晫澶勬垨鑰呮壘鍒頒竴涓皬浜庝腑鍊肩殑鍏冪礌涓烘錛屾垨鑰呰錛宻m灝辨槸a0[l..mid]涓瓑浜庝腑鍊肩殑鍏冪礌涓暟錛夛紝鐒跺悗寮濮嬪垝鍒嗭紝灝忎簬涓煎垎鍒板乏瀛愮粨鐐癸紝澶т簬涓煎垎鍒板彸瀛愮粨鐐癸紝絳変簬涓肩殑錛岃嫢鐩墠榪樻病婊m鍒欏垎鍒板乏瀛愮粨鐐瑰惁鍒欏垎鍒板彸瀛愮粨鐐廣傚彟澶栦腑闂存湁涓や釜鍊奸渶瑕佽褰曪紙鎵懼尯闂寸K灝忔椂蹇呴』瑕佺敤鍒幫級錛歴l鍜宻r銆俿l[i]琛ㄧず[l..i]涓鍒嗗埌宸﹀瓙緇撶偣鐨勫厓绱犱釜鏁幫紝sr[i]琛ㄧず[l..i]涓鍒嗗埌鍙沖瓙緇撶偣鐨勫厓绱犱釜鏁幫紙榪欓噷l<=i<=r銆傛樉鐒秙l[i]+sr[i]=i-l+1錛屽叾瀹瀞r[i]鍙互涓嶇敤璁板綍鐨勶紝榪欓噷鍙槸涓轟簡鍦ㄦ壘絎琄灝忔搷浣滀腑鍑忓皯璁$畻嬈℃暟錛岃搗鍒扮┖闂存崲鏃墮棿鐨勪綔鐢級銆?br />寤烘爲浠g爜錛? <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">int</span><span style="color: #000000"> mkt(</span><span style="color: #0000ff">int</span><span style="color: #000000"> l, </span><span style="color: #0000ff">int</span><span style="color: #000000"> r, </span><span style="color: #0000ff">int</span><span style="color: #000000"> d)<br />{<br />    T[</span><span style="color: #000000">++</span><span style="color: #000000">No].l </span><span style="color: #000000">=</span><span style="color: #000000"> l; T[No].r </span><span style="color: #000000">=</span><span style="color: #000000"> r; </span><span style="color: #0000ff">int</span><span style="color: #000000"> mid </span><span style="color: #000000">=</span><span style="color: #000000"> l </span><span style="color: #000000">+</span><span style="color: #000000"> r </span><span style="color: #000000">>></span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; T[No].mid </span><span style="color: #000000">=</span><span style="color: #000000"> mid;<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (l </span><span style="color: #000000">==</span><span style="color: #000000"> r) </span><span style="color: #0000ff">return</span><span style="color: #000000"> No;<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> midv </span><span style="color: #000000">=</span><span style="color: #000000"> a0[mid], sm </span><span style="color: #000000">=</span><span style="color: #000000"> mid </span><span style="color: #000000">-</span><span style="color: #000000"> l </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; rre2(i, mid, l) </span><span style="color: #0000ff">if</span><span style="color: #000000"> (a0[i] </span><span style="color: #000000"><</span><span style="color: #000000"> midv) {sm </span><span style="color: #000000">=</span><span style="color: #000000"> mid </span><span style="color: #000000">-</span><span style="color: #000000"> i; </span><span style="color: #0000ff">break</span><span style="color: #000000">;}<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> x </span><span style="color: #000000">=</span><span style="color: #000000"> l, y </span><span style="color: #000000">=</span><span style="color: #000000"> mid </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (a[d][l] </span><span style="color: #000000"><</span><span style="color: #000000"> midv) {<br />        a[d </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">][x</span><span style="color: #000000">++</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> a[d][l]; sl[d][l] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; sr[d][l] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />    } </span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (a[d][l] </span><span style="color: #000000">==</span><span style="color: #000000"> midv </span><span style="color: #000000">&&</span><span style="color: #000000"> sm) {<br />        a[d </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">][x</span><span style="color: #000000">++</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> a[d][l]; sl[d][l] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; sr[d][l] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; sm</span><span style="color: #000000">--</span><span style="color: #000000">;<br />    } </span><span style="color: #0000ff">else</span><span style="color: #000000"> {<br />        a[d </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">][y</span><span style="color: #000000">++</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> a[d][l]; sl[d][l] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; sr[d][l] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    re3(i, l</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">, r) {<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (a[d][i] </span><span style="color: #000000"><</span><span style="color: #000000"> midv) {<br />            a[d </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">][x</span><span style="color: #000000">++</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> a[d][i]; sl[d][i] </span><span style="color: #000000">=</span><span style="color: #000000"> sl[d][i </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">] </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; sr[d][i] </span><span style="color: #000000">=</span><span style="color: #000000"> sr[d][i </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">];<br />        } </span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (a[d][i] </span><span style="color: #000000">==</span><span style="color: #000000"> midv </span><span style="color: #000000">&&</span><span style="color: #000000"> sm) {<br />            a[d </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">][x</span><span style="color: #000000">++</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> a[d][i]; sl[d][i] </span><span style="color: #000000">=</span><span style="color: #000000"> sl[d][i </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">] </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; sr[d][i] </span><span style="color: #000000">=</span><span style="color: #000000"> sr[d][i </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">]; sm</span><span style="color: #000000">--</span><span style="color: #000000">;<br />        } </span><span style="color: #0000ff">else</span><span style="color: #000000"> {<br />            a[d </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">][y</span><span style="color: #000000">++</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> a[d][i]; sl[d][i] </span><span style="color: #000000">=</span><span style="color: #000000"> sl[d][i </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">]; sr[d][i] </span><span style="color: #000000">=</span><span style="color: #000000"> sr[d][i </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">] </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;<br />        }<br />    }<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> No0 </span><span style="color: #000000">=</span><span style="color: #000000"> No; T[No0].lch </span><span style="color: #000000">=</span><span style="color: #000000"> mkt(l, mid, d </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">); T[No0].rch </span><span style="color: #000000">=</span><span style="color: #000000"> mkt(mid </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">, r, d </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">); </span><span style="color: #0000ff">return</span><span style="color: #000000"> No0;<br />}<br /></span></div>榪欓噷a鏄瘡灞傚垝鍒嗗悗鐨勫簭鍒椼?br />鏌ユ壘鍖洪棿絎琄灝忕殑浠g爜錛? <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">int</span><span style="color: #000000"> Find_Kth(</span><span style="color: #0000ff">int</span><span style="color: #000000"> l, </span><span style="color: #0000ff">int</span><span style="color: #000000"> r, </span><span style="color: #0000ff">int</span><span style="color: #000000"> K)<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> root, d </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">, l0, r0, mid0, s0, s1;<br />    </span><span style="color: #0000ff">while</span><span style="color: #000000"> (</span><span style="color: #000000">1</span><span style="color: #000000">) {<br />        l0 </span><span style="color: #000000">=</span><span style="color: #000000"> T[i].l, r0 </span><span style="color: #000000">=</span><span style="color: #000000"> T[i].r; mid0 </span><span style="color: #000000">=</span><span style="color: #000000"> T[i].mid;<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (l0 </span><span style="color: #000000">==</span><span style="color: #000000"> r0) </span><span style="color: #0000ff">return</span><span style="color: #000000"> a[d][l];<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (l </span><span style="color: #000000">==</span><span style="color: #000000"> l0) s0 </span><span style="color: #000000">=</span><span style="color: #000000"> l; </span><span style="color: #0000ff">else</span><span style="color: #000000"> s0 </span><span style="color: #000000">=</span><span style="color: #000000"> l0 </span><span style="color: #000000">+</span><span style="color: #000000"> sl[d][l </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">]; s1 </span><span style="color: #000000">=</span><span style="color: #000000"> l0 </span><span style="color: #000000">+</span><span style="color: #000000"> sl[d][r] </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (K </span><span style="color: #000000"><=</span><span style="color: #000000"> s1 </span><span style="color: #000000">-</span><span style="color: #000000"> s0 </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">) {<br />            i </span><span style="color: #000000">=</span><span style="color: #000000"> T[i].lch; l </span><span style="color: #000000">=</span><span style="color: #000000"> s0; r </span><span style="color: #000000">=</span><span style="color: #000000"> s1; d</span><span style="color: #000000">++</span><span style="color: #000000">;<br />        } </span><span style="color: #0000ff">else</span><span style="color: #000000"> {<br />            K </span><span style="color: #000000">-=</span><span style="color: #000000"> (s1 </span><span style="color: #000000">-</span><span style="color: #000000"> s0 </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">); </span><span style="color: #0000ff">if</span><span style="color: #000000"> (l </span><span style="color: #000000">==</span><span style="color: #000000"> l0) l </span><span style="color: #000000">=</span><span style="color: #000000"> mid0 </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; </span><span style="color: #0000ff">else</span><span style="color: #000000"> l </span><span style="color: #000000">=</span><span style="color: #000000"> mid0 </span><span style="color: #000000">+</span><span style="color: #000000"> sr[d][l </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">] </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;<br />            r </span><span style="color: #000000">=</span><span style="color: #000000"> mid0 </span><span style="color: #000000">+</span><span style="color: #000000"> sr[d][r]; i </span><span style="color: #000000">=</span><span style="color: #000000"> T[i].rch; d</span><span style="color: #000000">++</span><span style="color: #000000">;<br />        }<br />    }<br />}<br /></span></div><br />銆愬叿浣撻鐩?a title="PKU2104" >PKU2104</a>銆?a title="PKU2761" >PKU2761</a>錛堜袱閬撲換閫変竴閬擄級<br /><br /> <img src ="http://www.shnenglu.com/MatoNo1/aggbug/149604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2011-06-27 20:54 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/06/27/149604.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>緗戠粶嫻佸浘杈硅〃鐨勬柊琛ㄧず娉曪細Dancing Link杈硅〃錛堣В鍐抽渶瑕佸垹杈規垨鍒犵偣鎴栨敼瀹歸噺鐨勫嬈℃眰鏈澶ф祦闂錛?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/05/07/145885.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Sat, 07 May 2011 06:12:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/05/07/145885.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/145885.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/05/07/145885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/145885.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/145885.html</trackback:ping><description><![CDATA[鑰冭檻榪欐牱涓縐嶇綉緇滄祦闂錛氶渶瑕佸鍚屼竴涓浘姹傚嬈℃渶澶ф祦銆傚垯鍦ㄦ瘡嬈℃眰鏈澶ф祦涔嬪墠錛岄渶瑕佸皢鎵鏈夎竟鐨勫閲忓叏閮ㄦ仮澶嶅埌鍒濆鍊鹼紙姹傛渶澶ф祦鐨勮繃紼嬩腑錛岃竟鐨勫閲廸鍊艱鏀瑰彉浜嗭級銆備笉榪囪繖榪樹笉綆楁渶鐚ョ悙鐨勶紝鏈夌殑鏃跺欙紝鎴戜滑闇瑕佸湪姣忔姹傛渶澶ф祦涔嬪墠閮藉垹鍘誨浘涓殑涓浜涚偣鎴栦竴浜涜竟錛屾垨鑰呮敼鍙樻煇浜涘師鏈夌殑杈圭殑瀹歸噺錛岀壒鍒槸闇瑕佸垹鐐規垨鍒犺竟鐨勬儏鍐電垎闅炬悶銆傚洜涓猴紝涓鑸殑杈硅〃涓竟綾誨瀷瀹氫箟濡備笅錛?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">struct</span><span style="color: #000000"> edge {<br />        </span><span style="color: #0000ff">int</span><span style="color: #000000"> a, b, f, next;<br />} ed[MAXM </span><span style="color: #000000">+</span><span style="color: #000000"> MAXM];</span></div>琛ㄧず榪欐潯杈硅搗鐐逛負a錛岀粓鐐逛負b錛屽閲忎負f錛岄偦鎺ヨ竟錛堝氨鏄笅涓鏉¤搗鐐逛負a鐨勮竟錛夌殑緙栧彿涓簄ext銆?br />濡傛灉瑕佹眰澶氭鏈澶ф祦錛岄偅涔堝湪姣忔姹傛渶澶ф祦涔嬪墠灝辮鎶婃墍鏈夎竟鐨勫閲忔仮澶嶅埌鍒濆鍊鹼紝瑙e喅鏂規硶鏄紩鍏ヤ竴涓?#8220;鍒濆瀹歸噺”鍩焒s錛屽湪榪欐潯杈瑰垰鍒氳鍔犲叆鐨勬椂鍊欏皢瀹冪殑fs鍊煎拰f鍊奸兘璁句負鍒濆緇欏畠鐨勫閲忥紝鍦ㄦ仮澶嶆椂錛屽彧瑕佸皢鎵鏈夎竟鐨刦鍊兼仮澶嶅埌fs鍗沖彲銆傝嫢瑕佹敼鍙樿竟瀹歸噺錛屽垯灝嗚杈圭殑fs鍊煎拰f鍊奸兘璁句負鏀瑰彉鍚庣殑瀹歸噺鍗沖彲銆?br /><br />涓嬮潰鏉ュ垎鏋愰渶瑕佸垹杈規垨鍒犵偣鐨勬儏鍐點傚湪榪欑鎯呭喌涓嬶紝濡傛灉閲囩敤鍙湁next鐨勫崟鍚戦摼琛紝鍒欏垹闄ゆ椂next鍩熸瀬闅懼鐞嗭紝鑰屼笖錛屽湪涓鑸殑杈硅〃涓紝榪樿绔嬩簡琛ㄥごhd錛宧d[a]琛ㄧず杈硅〃涓搗鐐逛負a鐨勭涓鏉¤竟鐨勭紪鍙楓傚洜姝わ紝鑻ュ垹闄ょ殑杈?lt;a, b, f>鏄搗鐐逛負a鐨勭涓鏉¤竟錛岃繕浼氬獎鍝峢d[a]鐨勫鹼紝浣挎儏鍐靛彉寰楁洿涓哄鏉傘傚洜姝わ紝蹇呴』閲囩敤鍙屽悜閾捐〃錛佽繕璁板緱Dancing Link涔堬紵杈硅〃鍏跺疄涔熷彲浠ユ悶鎴怐ancing Link錛屾柟娉曞涓嬶細<br />璁懼浘涓湁N涓偣錛孧鏉¤竟錛堟敞鎰忥紝榪橫鏉¤竟鍙寘鎷鍚戣竟錛屼笉鍖呮嫭鍙嶅悜杈廣傜敱浜庢瘡鏉℃鍚戣竟<a, b, f>閮藉搴斾竴鏉″弽鍚戣竟<b, a, 0>錛屽洜姝よ竟琛ㄤ腑杈圭殑鏁扮洰鍏跺疄鏄疢+M錛夈傞鍏堟妸杈硅〃ed鐨?~N榪?N+1)涓綅緗紙涓嬫爣錛夌┖鍑烘潵錛屼綔琛ㄥご錛堣〃澶翠笉鏄竟錛屽洜姝ゅ湪閬嶅巻杈圭殑鏃跺欎笉浼氶亶鍘嗗埌瀹冧滑錛夈傚叾涓紝ed[0]涓烘昏〃澶達紝鐢ㄤ簬閬嶅巻ed[1..N]涓瘡涓湭琚垹鍘葷殑鐐癸紱ed[1..N]涓哄崟鐐硅〃澶達紝ed[i]鐢ㄦ潵閬嶅巻鍥句腑鎵鏈変互i涓鴻搗鐐圭殑杈癸紙鍜孌LX涓殑浜岀淮DL鎯婁漢鐩鎬技錛夈傜劧鍚庯紝鑻涓哄伓鏁幫紝鍒欑┖涓涓綅緗紙涔熷氨鏄皢ed[N+1]涓㈠純涓嶇敤錛夛紝榪欐槸鍥犱負鎴戜滑鍦ㄥ騫胯繃紼嬩腑闇瑕佸紩鐢ㄥ埌涓鏉¤竟瀵瑰簲鐨勯嗗悜杈癸紙姝e悜杈瑰搴斿弽鍚戣竟錛屽弽鍚戣竟瀵瑰簲姝e悜杈癸級錛屼竴鑸涓虹紪鍙蜂負p鐨勮竟瀵瑰簲鐨勯嗗悜杈規槸p ^ 1錛岃繖鏍鳳紝灝辮姹傚浘涓墍鏈夋鍚戣竟鐨勭紪鍙烽兘鏄伓鏁幫紝鎵鏈夊弽鍚戣竟鐨勭紪鍙烽兘鏄鏁幫紙鍚﹀垯浼氶犳垚娣蜂貢錛夈傚洜姝ゅ綋N涓哄伓鏁版椂錛?N+1)涓哄鏁幫紝涓嶈兘鏀劇疆絎竴鏉℃鍚戣竟錛岄渶瑕佷粠ed[N+2]寮濮嬫斁緗鍚戣竟銆傝嫢N涓哄鏁板垯涓嶇敤絀轟綅銆?br />鎺ヤ笅鏉ュ氨鏄竟綾誨瀷浜嗐傚湪榪欓噷錛岃竟綾誨瀷涓鍏遍渶瑕佸寘鎷?涓煙錛歛, b, fs, f, pre, next錛岃〃紺鴻繖鏉¤竟璧風偣涓篴錛岀粓鐐逛負b錛屽垵濮嬪閲忎負fs錛屽綋鍓嶅閲忎負f錛屼笂涓鏉¤搗鐐逛負a鐨勮竟緙栧彿涓簆re錛屼笅涓鏉¤搗鐐逛負a鐨勮竟緙栧彿涓簄ext銆傛敞鎰忥紝鍜孌L涓鏍鳳紝鏁翠釜閾捐〃鏄驚鐜殑錛屼篃灝辨槸鎴戜滑璁や負琛ㄤ腑鏈鍚庝竴鏉¤搗鐐逛負a鐨勮竟鐨勪笅涓鏉¢偦鎺ヨ竟緙栧彿灝辨槸a錛堣〃澶達級錛屽悓鏍鳳紝a鐨勪笂涓鏉¢偦鎺ヨ竟涔熷氨鏄繖鏉¤竟銆?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">struct</span><span style="color: #000000"> edge {<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> a, b, fs, f, pre, next;<br />} ed[MAXM </span><span style="color: #000000">+</span><span style="color: #000000"> MAXM];</span></div>鎺ヤ笅鏉ュ氨鏄嚑涓噸瑕佽繃紼嬩簡銆?br />錛?錛夊垵濮嬪寲琛ㄥご錛?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">void</span><span style="color: #000000"> init_d()<br />{<br />    re1(i, n) {ed[i].a </span><span style="color: #000000">=</span><span style="color: #000000"> i; ed[i].b </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">; ed[i].f </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; ed[i].pre </span><span style="color: #000000">=</span><span style="color: #000000"> ed[i].next </span><span style="color: #000000">=</span><span style="color: #000000"> i;}<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (n </span><span style="color: #000000">%</span><span style="color: #000000"> </span><span style="color: #000000">2</span><span style="color: #000000">) m </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">; </span><span style="color: #0000ff">else</span><span style="color: #000000"> m </span><span style="color: #000000">=</span><span style="color: #000000"> n </span><span style="color: #000000">+</span><span style="color: #000000"> 2</span><span style="color: #000000">;<br />}</span></div>榪欓噷n鏄浘涓殑鐐規暟錛堢浉褰撲簬N錛夛紝m鏄竟鐨勭紪鍙鋒寚閽堬紙鐩稿綋浜嶥LX涓殑nodes錛?br />錛?錛夋坊鍔犳柊杈癸細<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">void</span><span style="color: #000000"> add_edge(</span><span style="color: #0000ff">int</span><span style="color: #000000"> a, </span><span style="color: #0000ff">int</span><span style="color: #000000"> b, </span><span style="color: #0000ff">int</span><span style="color: #000000"> f)<br />{<br />    ed[m].a </span><span style="color: #000000">=</span><span style="color: #000000"> a; ed[m].b </span><span style="color: #000000">=</span><span style="color: #000000"> b; ed[m].fs </span><span style="color: #000000">=</span><span style="color: #000000"> ed[m].f </span><span style="color: #000000">=</span><span style="color: #000000"> f; ed[m].pre </span><span style="color: #000000">=</span><span style="color: #000000"> ed[a].pre; ed[m].next </span><span style="color: #000000">=</span><span style="color: #000000"> a; ed[a].pre </span><span style="color: #000000">=</span><span style="color: #000000"> m; ed[ed[m].pre].next </span><span style="color: #000000">=</span><span style="color: #000000"> m</span><span style="color: #000000">++</span><span style="color: #000000">;<br />    ed[m].a </span><span style="color: #000000">=</span><span style="color: #000000"> b; ed[m].b </span><span style="color: #000000">=</span><span style="color: #000000"> a; ed[m].fs </span><span style="color: #000000">=</span><span style="color: #000000"> ed[m].f </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; ed[m].pre </span><span style="color: #000000">=</span><span style="color: #000000"> ed[b].pre; ed[m].next </span><span style="color: #000000">=</span><span style="color: #000000"> b; ed[b].pre </span><span style="color: #000000">=</span><span style="color: #000000"> m; ed[ed[m].pre].next </span><span style="color: #000000">=</span><span style="color: #000000"> m</span><span style="color: #000000">++</span><span style="color: #000000">;<br />}</span></div>榪欎釜鍜孌LX綾諱技錛屼笉瑙i噴浜嗗洤……<br /><br />鏈鍚庤繘鍏ユ渶鏍稿績鐨勯儴鍒?#8212;—鍒板簳濡備綍澶勭悊鍒犺竟鎴栧垹鐐癸紵鏈変簡DL鍨嬭竟琛ㄥ氨鐖嗗ソ鎼炰簡錛氬垹鍘諱竴鏉¤竟錛屽彧瑕佺洿鎺ュ垹鍘昏杈瑰湪DL涓殑浣嶇疆鍗沖彲錛?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">void</span><span style="color: #000000"> deledge(</span><span style="color: #0000ff">int</span><span style="color: #000000"> No)<br />{<br />    ed[ed[No].pre].next </span><span style="color: #000000">=</span><span style="color: #000000"> ed[No].next; ed[ed[No].next].pre </span><span style="color: #000000">=</span><span style="color: #000000"> ed[No].pre;<br />}<br /></span></div>鎭㈠涓鏉″凡鍒犲幓鐨勮竟錛?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">void</span><span style="color: #000000"> resuedge(</span><span style="color: #0000ff">int</span><span style="color: #000000"> No)<br />{<br />    ed[ed[No].pre].next </span><span style="color: #000000">=</span><span style="color: #000000"> ed[ed[No].next].pre </span><span style="color: #000000">=</span><span style="color: #000000"> No;<br />}</span></div>闇瑕佸垹鐐圭殑鎯呭喌綾諱技錛屽鍗曠偣琛ㄥご澶勭悊鍗沖彲銆?br /><br />銆愬叿浣撻鐩?a title="PKU1815" >PKU1815</a><br />榪欓灝辨槸姹傛湁鍚戝浘鐨勫瓧鍏稿簭鏈灝忕殑鏈灝忕偣鍓查泦闂錛屾柟娉曟槸鍏堟眰鍑烘渶灝忕偣榪為氬害錛堟湁鍏蟲渶灝忕偣榪為氬害鐨勬眰娉曡<a title="鍥劇殑榪為氬害闂鐨勬眰娉? href="http://www.shnenglu.com/MatoNo1/archive/2011/04/05/143449.html">鍥劇殑榪為氬害闂鐨勬眰娉?/a>錛夛紝鐒跺悗鎸夌紪鍙烽掑欏哄簭鏋氫婦姣忎釜鐐癸紝鑻ュ垹鍘昏鐐癸紙鍏跺疄鏄垹鍘誨緩鎴愮殑鏂板浘涓鐐筰'鍒拌鐐歸檮鍔犵偣i''涔嬮棿鐨勮竟錛夊悗鍥劇殑鏈灝忕偣榪為氬害鍑忓皬錛屽垯搴斿垹鍘昏鐐癸紝鍚﹀垯涓嶅簲鍒犲幓璇ョ偣銆傚垹鍘誨悗錛岀戶緇灇涓句笅涓涓偣錛岀洿鍒版眰鍑虹偣鍓查泦涓烘銆?br />娉ㄦ剰錛屾湰棰樺彧鏈夊垹杈癸紝娌℃湁鍒犵偣錛屽洜姝ゆ昏〃澶村彲浠ヤ笉闇瑕侊紝鐩存帴浠巈d[0]寮濮嬩綔鍗曠偣琛ㄥご銆傛鏃訛紝鍏充簬鏄惁絀轟綅灝卞垰濂藉弽榪囨潵浜嗭細濡傛灉N鏄鏁板氨瑕佺┖浣嶏紝N鏄伓鏁頒笉絀轟綅錛堜笉榪囪繖棰橀噷鐢變簬寤哄嚭鐨勭綉緇滄祦鍥句腑鏈?*N0涓粨鐐癸紝鎬繪槸鍋舵暟錛屽彲浠ヤ笉綆★紝涓嶈繃鏈矙鑼惰繕鏄榪欎釜浜嗭級銆?br /><br />浠g爜錛堢鐘囦笉瑕侀剻瑙嗭級錛?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">#include </span><span style="color: #000000"><</span><span style="color: #000000">iostream</span><span style="color: #000000">></span><span style="color: #000000"><br />#include </span><span style="color: #000000"><</span><span style="color: #000000">stdio.h</span><span style="color: #000000">></span><span style="color: #000000"><br /></span><span style="color: #0000ff">using</span><span style="color: #000000"> </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> std;<br /></span><span style="color: #0000ff">#define</span><span style="color: #000000"> re(i, n) for (int i=0; i<n; i++)</span><span style="color: #000000"><br /></span><span style="color: #0000ff">const</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> MAXN </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">501</span><span style="color: #000000">, MAXM </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">100000</span><span style="color: #000000">, INF </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">~</span><span style="color: #000000">0U</span><span style="color: #000000"> </span><span style="color: #000000">>></span><span style="color: #000000"> </span><span style="color: #000000">2</span><span style="color: #000000">;<br /></span><span style="color: #0000ff">struct</span><span style="color: #000000"> edge {<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> a, b, fs, f, pre, next;<br />} ed[MAXM </span><span style="color: #000000">+</span><span style="color: #000000"> MAXM];<br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> n0, n, m </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">, s, t, start[MAXN], pr[MAXN], hs[MAXN], lev[MAXN], q[MAXN], now, flow, reslen </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">, res[MAXN];<br /></span><span style="color: #0000ff">bool</span><span style="color: #000000"> vst[MAXN];<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> init_d()<br />{<br />    re(i, n) {ed[i].a </span><span style="color: #000000">=</span><span style="color: #000000"> i; ed[i].b </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">; ed[i].f </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; ed[i].pre </span><span style="color: #000000">=</span><span style="color: #000000"> ed[i].next </span><span style="color: #000000">=</span><span style="color: #000000"> i;}<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (n </span><span style="color: #000000">%</span><span style="color: #000000"> </span><span style="color: #000000">2</span><span style="color: #000000">) m </span><span style="color: #000000">=</span><span style="color: #000000"> n </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; </span><span style="color: #0000ff">else</span><span style="color: #000000"> m </span><span style="color: #000000">=</span><span style="color: #000000"> n;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> add_edge(</span><span style="color: #0000ff">int</span><span style="color: #000000"> a, </span><span style="color: #0000ff">int</span><span style="color: #000000"> b, </span><span style="color: #0000ff">int</span><span style="color: #000000"> f)<br />{<br />    ed[m].a </span><span style="color: #000000">=</span><span style="color: #000000"> a; ed[m].b </span><span style="color: #000000">=</span><span style="color: #000000"> b; ed[m].fs </span><span style="color: #000000">=</span><span style="color: #000000"> ed[m].f </span><span style="color: #000000">=</span><span style="color: #000000"> f; ed[m].pre </span><span style="color: #000000">=</span><span style="color: #000000"> ed[a].pre; ed[m].next </span><span style="color: #000000">=</span><span style="color: #000000"> a; ed[a].pre </span><span style="color: #000000">=</span><span style="color: #000000"> m; ed[ed[m].pre].next </span><span style="color: #000000">=</span><span style="color: #000000"> m</span><span style="color: #000000">++</span><span style="color: #000000">;<br />    ed[m].a </span><span style="color: #000000">=</span><span style="color: #000000"> b; ed[m].b </span><span style="color: #000000">=</span><span style="color: #000000"> a; ed[m].fs </span><span style="color: #000000">=</span><span style="color: #000000"> ed[m].f </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; ed[m].pre </span><span style="color: #000000">=</span><span style="color: #000000"> ed[b].pre; ed[m].next </span><span style="color: #000000">=</span><span style="color: #000000"> b; ed[b].pre </span><span style="color: #000000">=</span><span style="color: #000000"> m; ed[ed[m].pre].next </span><span style="color: #000000">=</span><span style="color: #000000"> m</span><span style="color: #000000">++</span><span style="color: #000000">;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> init()<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> x;<br />    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">&</span><span style="color: #000000">n0, </span><span style="color: #000000">&</span><span style="color: #000000">s, </span><span style="color: #000000">&</span><span style="color: #000000">t);<br />    n </span><span style="color: #000000">=</span><span style="color: #000000"> n0 </span><span style="color: #000000"><<</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; s</span><span style="color: #000000">--</span><span style="color: #000000">; t </span><span style="color: #000000">+=</span><span style="color: #000000"> n0 </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; init_d();<br />    re(i, n0) re(j, n0) {<br />        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">&</span><span style="color: #000000">x);<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (i </span><span style="color: #000000">==</span><span style="color: #000000"> j) {<br />            </span><span style="color: #0000ff">if</span><span style="color: #000000"> (i </span><span style="color: #000000">==</span><span style="color: #000000"> s </span><span style="color: #000000">||</span><span style="color: #000000"> i </span><span style="color: #000000">==</span><span style="color: #000000"> t </span><span style="color: #000000">-</span><span style="color: #000000"> n0) add_edge(i, i </span><span style="color: #000000">+</span><span style="color: #000000"> n0, INF); </span><span style="color: #0000ff">else</span><span style="color: #000000"> add_edge(i, i </span><span style="color: #000000">+</span><span style="color: #000000"> n0, </span><span style="color: #000000">1</span><span style="color: #000000">);<br />        } </span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (x) add_edge(i </span><span style="color: #000000">+</span><span style="color: #000000"> n0, j, INF);<br />    }<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> aug()<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> z </span><span style="color: #000000">=</span><span style="color: #000000"> hs[t], i </span><span style="color: #000000">=</span><span style="color: #000000"> t, p; flow </span><span style="color: #000000">+=</span><span style="color: #000000"> z;<br />    </span><span style="color: #0000ff">while</span><span style="color: #000000"> (i </span><span style="color: #000000">!=</span><span style="color: #000000"> s) {<br />        hs[i] </span><span style="color: #000000">-=</span><span style="color: #000000"> z; p </span><span style="color: #000000">=</span><span style="color: #000000"> pr[i]; ed[p].f </span><span style="color: #000000">-=</span><span style="color: #000000"> z; ed[p </span><span style="color: #000000">^</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">].f </span><span style="color: #000000">+=</span><span style="color: #000000"> z; i </span><span style="color: #000000">=</span><span style="color: #000000"> ed[p].a;<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">ed[p].f) now </span><span style="color: #000000">=</span><span style="color: #000000"> i;<br />    }<br />}<br /></span><span style="color: #0000ff">bool</span><span style="color: #000000"> dfs()<br />{<br />    re(i, n) vst[i] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; vst[s] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; q[</span><span style="color: #000000">0</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> s; lev[s] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> i, j, f0;<br />    </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> front</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">, rear</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">; front</span><span style="color: #000000"><=</span><span style="color: #000000">rear; front</span><span style="color: #000000">++</span><span style="color: #000000">) {<br />        i </span><span style="color: #000000">=</span><span style="color: #000000"> q[front];<br />        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> p</span><span style="color: #000000">=</span><span style="color: #000000">ed[i].next; p </span><span style="color: #000000">!=</span><span style="color: #000000"> i; p</span><span style="color: #000000">=</span><span style="color: #000000">ed[p].next) </span><span style="color: #0000ff">if</span><span style="color: #000000"> (ed[p].f) {<br />            j </span><span style="color: #000000">=</span><span style="color: #000000"> ed[p].b;<br />            </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">vst[j]) {vst[j] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; q[</span><span style="color: #000000">++</span><span style="color: #000000">rear] </span><span style="color: #000000">=</span><span style="color: #000000"> j; lev[j] </span><span style="color: #000000">=</span><span style="color: #000000"> lev[i] </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;}<br />        }<br />    }<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">vst[t]) </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />    now </span><span style="color: #000000">=</span><span style="color: #000000"> s; re(i, n) {start[i] </span><span style="color: #000000">=</span><span style="color: #000000"> ed[i].next; vst[i] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;} hs[now] </span><span style="color: #000000">=</span><span style="color: #000000"> INF;<br />    </span><span style="color: #0000ff">bool</span><span style="color: #000000"> fd;<br />    </span><span style="color: #0000ff">while</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">vst[s]) {<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (now </span><span style="color: #000000">==</span><span style="color: #000000"> t) aug();<br />        fd </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> p</span><span style="color: #000000">=</span><span style="color: #000000">start[now]; p </span><span style="color: #000000">!=</span><span style="color: #000000"> now; p</span><span style="color: #000000">=</span><span style="color: #000000">ed[p].next) {<br />            j </span><span style="color: #000000">=</span><span style="color: #000000"> ed[p].b; f0 </span><span style="color: #000000">=</span><span style="color: #000000"> ed[p].f;<br />            </span><span style="color: #0000ff">if</span><span style="color: #000000"> (lev[now] </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000"> </span><span style="color: #000000">==</span><span style="color: #000000"> lev[j] </span><span style="color: #000000">&&</span><span style="color: #000000"> </span><span style="color: #000000">!</span><span style="color: #000000">vst[j] </span><span style="color: #000000">&&</span><span style="color: #000000"> f0) {<br />                fd </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; start[now] </span><span style="color: #000000">=</span><span style="color: #000000"> pr[j] </span><span style="color: #000000">=</span><span style="color: #000000"> p; hs[j] </span><span style="color: #000000">=</span><span style="color: #000000"> hs[now] </span><span style="color: #000000"><=</span><span style="color: #000000"> f0 </span><span style="color: #000000">?</span><span style="color: #000000"> hs[now] : f0; now </span><span style="color: #000000">=</span><span style="color: #000000"> j; </span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />            }<br />        }<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">fd) {<br />            vst[now] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;<br />            </span><span style="color: #0000ff">if</span><span style="color: #000000"> (now </span><span style="color: #000000">!=</span><span style="color: #000000"> s) now </span><span style="color: #000000">=</span><span style="color: #000000"> ed[pr[now]].a;<br />        }<br />    }<br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> deledge(</span><span style="color: #0000ff">int</span><span style="color: #000000"> No)<br />{<br />    ed[ed[No].pre].next </span><span style="color: #000000">=</span><span style="color: #000000"> ed[No].next; ed[ed[No].next].pre </span><span style="color: #000000">=</span><span style="color: #000000"> ed[No].pre;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> resuedge(</span><span style="color: #0000ff">int</span><span style="color: #000000"> No)<br />{<br />    ed[ed[No].pre].next </span><span style="color: #000000">=</span><span style="color: #000000"> ed[ed[No].next].pre </span><span style="color: #000000">=</span><span style="color: #000000"> No;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> resu_all()<br />{<br />    re(i, n) </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> p</span><span style="color: #000000">=</span><span style="color: #000000">ed[i].next; p </span><span style="color: #000000">!=</span><span style="color: #000000"> i; p</span><span style="color: #000000">=</span><span style="color: #000000">ed[p].next) ed[p].f </span><span style="color: #000000">=</span><span style="color: #000000"> ed[p].fs;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> solve()<br />{<br />    flow </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; </span><span style="color: #0000ff">while</span><span style="color: #000000"> (dfs()) ; </span><span style="color: #0000ff">int</span><span style="color: #000000"> f_ </span><span style="color: #000000">=</span><span style="color: #000000"> flow;<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">flow) {reslen </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">; </span><span style="color: #0000ff">return</span><span style="color: #000000">;}<br />    re(i, m) </span><span style="color: #0000ff">if</span><span style="color: #000000"> (ed[i].a </span><span style="color: #000000">+</span><span style="color: #000000"> n0 </span><span style="color: #000000">==</span><span style="color: #000000"> ed[i].b </span><span style="color: #000000">&&</span><span style="color: #000000"> ed[i].a </span><span style="color: #000000">!=</span><span style="color: #000000"> s </span><span style="color: #000000">&&</span><span style="color: #000000"> ed[i].b </span><span style="color: #000000">!=</span><span style="color: #000000"> t) {<br />        deledge(i); deledge(i </span><span style="color: #000000">^</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">); resu_all();<br />        flow </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; </span><span style="color: #0000ff">while</span><span style="color: #000000"> (dfs()) ;<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (flow </span><span style="color: #000000"><</span><span style="color: #000000"> f_) {res[reslen</span><span style="color: #000000">++</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> ed[i].a </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; f_</span><span style="color: #000000">--</span><span style="color: #000000">;} </span><span style="color: #0000ff">else</span><span style="color: #000000"> {resuedge(i </span><span style="color: #000000">^</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">); resuedge(i);}<br />    }<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> pri()<br />{<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (reslen </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">) puts(</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">); </span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (reslen) {<br />        printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">, reslen);<br />        re(i, reslen </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">) printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d </span><span style="color: #000000">"</span><span style="color: #000000">, res[i]); printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">, res[reslen </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">]);<br />    } </span><span style="color: #0000ff">else</span><span style="color: #000000"> puts(</span><span style="color: #000000">"</span><span style="color: #000000">NO ANSWER!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />}<br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> main()<br />{<br />    init();<br />    solve();<br />    pri();<br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /></span></div><br /><img src ="http://www.shnenglu.com/MatoNo1/aggbug/145885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2011-05-07 14:12 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/05/07/145885.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐢ˋ*姹傚浘鐨勫崟婧愬崟姹囩K鐭礬http://www.shnenglu.com/MatoNo1/archive/2011/05/01/145456.htmlMato_No1Mato_No1Sun, 01 May 2011 07:25:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2011/05/01/145456.htmlhttp://www.shnenglu.com/MatoNo1/comments/145456.htmlhttp://www.shnenglu.com/MatoNo1/archive/2011/05/01/145456.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/145456.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/145456.html緇欏嚭涓涓浘G鍜屾寚瀹氱殑婧愮偣s銆佹眹鐐箃錛屾眰鍥句腑浠庣偣s鍒扮偣t鐨勭K鐭礬銆?br>銆愬叿浣撻鐩?a title=PKU2449 >PKU2449錛堟敞鎰忥細鏈鏈変竴涓尌鐞愪箣澶勶細涓嶅厑璁哥┖璺緞銆備篃灝辨槸褰搒絳変簬t鏃惰灝咾鍊煎姞1錛?br>銆愮畻娉曘?br>鏈鏈変竴縐嶆渶鏈寸礌鐨勫姙娉曪細鏀歸燚ijkstra錛屼竴寮濮嬭礬寰?s, 0)錛堣繖閲岃璺緞(i, l)琛ㄧず浠巗鍒癷鐨勪竴鏉¢暱搴︿負l鐨勮礬寰勶級鍏ラ槦銆傜劧鍚庯紝姣忔鍙栭槦涓暱搴︽渶鐭殑璺緞錛岃璺緞(i, l)鍑洪槦錛屽彲浠ヨ瘉鏄庯紝鑻ヨ繖鏄粓鐐逛負i鐨勮礬寰勭x嬈″嚭闃燂紝璇ヨ礬寰勪竴瀹氭槸鍥句腑浠巗鍒癷鐨勭x鐭礬錛堣嫢x>K鍒欒璺緞宸叉棤鐢紝鑸嶅純錛夈傜劧鍚庝粠鐐筰鎵╁睍錛屽皢鎵╁睍鍒扮殑璺緞鍏ㄩ儴鍏ラ槦銆傝繖鏍風洿鍒扮粓鐐逛負t鐨勮礬寰勭K嬈″嚭闃熷嵆鍙?br>璇ョ畻娉曞鏄撳疄鐜幫紙鍊熷姪priority_queue錛夛紝浣嗘椂闂村鏉傚害鍙兘杈懼埌O(MK)錛岄渶瑕佷紭鍖栥?br>浼樺寲錛氬鏄撳彂鐜拌綆楁硶鍏跺疄鏈堿*鐨勬濇兂錛屾垨鑰呰錛岃綆楁硶鍏跺疄鏄墍鏈夌粨鐐圭殑浼頒環鍑芥暟h()鍊煎潎涓?鐨凙*綆楁硶銆備負浜嗕紭鍖栨棰橈紝闇瑕佸皢h()鍊兼敼澶с傛樉鐒訛紝h(i)鍊煎彲浠ヨ涓?span style="COLOR: red">浠巌鍒皌鐨勬渶鐭礬寰勯暱搴?/strong>錛堝鏄撹瘉鏄庡畠鏄竴鑷寸殑錛夛紝鐒跺悗g(i)=鐩墠緇撶偣浠h〃鐨勮礬寰勯暱搴︼紝f(i)=g(i)+h(i)錛岀劧鍚嶢*鍗沖彲銆?br>
娉ㄦ剰錛氭洿鏀硅礬寰勬潯鏁板簲璇ュ湪鍑洪槦鏃舵洿鏀癸紝鑰屼笉鑳藉湪鍏ラ槦鏃舵洿鏀癸紝鍥犱負鍙兘鍦ㄨ璺緞鍑洪槦涔嬪墠浼氭湁鏂扮殑姣斿畠鏇寸煭鐨勮礬寰勫叆闃熴?br>
浠g爜錛圥KU2449錛夛細
#include <iostream>
#include 
<stdio.h>
#include 
<queue>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
const int MAXN = 1500, MAXM = 150000, INF = ~0U >> 2;
struct edge {
    
int kk, len, next;
} ed[MAXM], ed2[MAXM];
int n, m, s, t, k_, hd[MAXN], tl[MAXN], hd2[MAXN], tl2[MAXN], h[MAXN], q[MAXN + 1], No[MAXN], res = -1;
bool vst[MAXN];
struct qnode {
    
int i, g;
};
typedef priority_queue 
<qnode, vector<qnode> > pq;
pq z;
bool operator< (qnode q1, qnode q2)
{
    
return q1.g + h[q1.i] > q2.g + h[q2.i];
}
void init()
{
    
int a0, b0, l0;
    scanf(
"%d%d"&n, &m);
    re(i, n) hd[i] 
= tl[i] = hd2[i] = tl2[i] = -1;
    re(i, m) {
        scanf(
"%d%d%d"&a0, &b0, &l0); a0--; b0--;
        ed[i].kk 
= b0; ed[i].len = l0; ed[i].next = -1;
        
if (hd[a0] == -1) hd[a0] = tl[a0] = i; else tl[a0] = ed[tl[a0]].next = i;
        ed2[i].kk 
= a0; ed2[i].len = l0; ed2[i].next = -1;
        
if (hd2[b0] == -1) hd2[b0] = tl2[b0] = i; else tl2[b0] = ed2[tl2[b0]].next = i;
    }
    scanf(
"%d%d%d"&s, &t, &k_); --s; --t; k_ += s == t;
}
void prepare()
{
    re(i, n) {h[i] 
= INF; vst[i] = 0;} h[t] = 0; vst[t] = 1; q[0= t;
    
int i, h0, j, h1;
    
for (int front=0, rear=0!(!front && rear == n || front == rear + 1); front == n ? front = 0 : front++) {
        i 
= q[front]; h0 = h[i];
        
for (int p=hd2[i]; p != -1; p=ed2[p].next) {
            j 
= ed2[p].kk; h1 = h0 + ed2[p].len;
            
if (h1 < h[j]) {
                h[j] 
= h1;
                
if (!vst[j]) {vst[j] = 1if (rear == n) q[rear = 0= j; else q[++rear] = j;}
            }
        }
        vst[i] 
= 0;
    }
}
void solve()
{
    qnode q0; q0.i 
= s; q0.g = 0; z.push(q0);
    re(i, n) No[i] 
= 0;
    
int i, d0, j, d1;
    
while (!z.empty()) {
        i 
= z.top().i; d0 = z.top().g; z.pop();
        
if (No[i] >= k_) continue;
        No[i]
++;
        
if (i == t && No[i] == k_) {res = d0; break;}
        
for (int p=hd[i]; p != -1; p=ed[p].next) {
            j 
= ed[p].kk; d1 = d0 + ed[p].len;
            q0.i 
= j; q0.g = d1; z.push(q0);
        }
    }
}
void pri()
{
    printf(
"%d\n", res);
}
int main()
{
    init();
    prepare();
    solve();
    pri();
    
return 0;
}


Mato_No1 2011-05-01 15:25 鍙戣〃璇勮
]]>
鍔ㄦ佸尯闂存渶澶у瓙搴忓拰闂鍙婃湁鍏蟲ā鍨?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/04/24/144901.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Sun, 24 Apr 2011 07:50:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/04/24/144901.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/144901.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/04/24/144901.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/144901.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/144901.html</trackback:ping><description><![CDATA[     鎽樿: 鍔ㄦ佸尯闂存渶澶у瓙搴忓拰闂銆愰棶棰樻弿榪般戠粰鍑轟竴涓簭鍒桝[0..N-1]鍜孧涓搷浣滐紝姣忎釜鎿嶄綔閮芥槸浠ヤ笅涓夌涔嬩竴錛氣憼錛氭煡璇㈠尯闂存渶澶у瓙搴忓拰鎿嶄綔鏍煎紡錛? l r琛ㄧず錛氭煡璇[l..r]鍐呯殑鏈澶у瓙搴忓拰錛堝氨鏄疉[l..r]鍐呯殑鍜屾渶澶х殑榪炵畫瀛愬簭鍒楃殑鍜岋級錛?<=l<=r<N錛涒憽錛氫慨鏀瑰崟涓兼搷浣滄牸寮忥細2 i x琛ㄧず錛氬皢A[i]鐨勫兼敼涓簒錛?<=i<N錛涒憿錛氫慨鏀規暣孌靛兼搷浣滄牸寮忥細3 l ...  <a href='http://www.shnenglu.com/MatoNo1/archive/2011/04/24/144901.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/MatoNo1/aggbug/144901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2011-04-24 15:50 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/04/24/144901.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐜艦涓茬殑鏈浼樻柇鐐歸棶棰?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/04/23/144852.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Sat, 23 Apr 2011 08:09:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/04/23/144852.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/144852.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/04/23/144852.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/144852.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/144852.html</trackback:ping><description><![CDATA[銆愰棶棰樻弿榪般?br>緇欏嚭涓涓幆褰㈢殑瀛楃涓睸錛岄暱搴︿負N錛岀幇鍦ㄨ鎵懼埌涓涓柇寮鐐癸紝浣垮緱浠庤繖閲屾柇寮鍚庣殑瀛楃涓插瓧鍏稿簭鏈灝忋傛垨鑰呰錛屽浜庨暱搴︿負N鐨勫瓧絎︿覆S[0..N-1]錛屾壘鍒頒竴涓綅緗甶錛屼嬌寰楀瓧絎︿覆S' = S[i..N-1] + S[0..i-1]鐨勫瓧鍏稿簭鏈灝忋傝嫢瀛樺湪澶氫釜榪欐牱鐨勬渶浼樻柇鐐癸紝鍒欏彇鏈宸﹁竟(i鏈灝?鐨勯偅涓?br>銆怱ample Input銆?br>amandamanda<br>銆怱ample Output銆?br>10<br>錛堜粠絎?0浣嶆柇寮鍚庡緱鍒扮殑瀛楃涓?aamandamand"鐨勫瓧鍏稿簭鏄?1涓柇寮浣嶇疆涓渶灝忕殑錛?br><br>銆愬垎鏋愩?br>棣栧厛灝嗚繖涓幆褰覆鎷嗗紑錛氬彧闇灝哠[0..N-1]鐨勫悗闈㈠啀鎺ヤ笂S[0..N-2]鍗沖彲錛堝瀵逛簬鏍蜂緥錛屽彲鏋勯犲瓧絎︿覆T = "amandamandaamandamand"錛夛紝鍒橳鐨勪換鎰忎竴涓暱搴︿負N鐨勫瓙涓睺[i..i-N+1]灝辨槸S浠庣i浣嶆柇寮寰楀埌鐨勫瓧絎︿覆銆傛鏃墮棶棰樺氨鍙樻垚浜嗭細<span style="COLOR: red"><strong>緇欏嚭涓涓暱搴︿負(2N-1)鐨勫瓧絎︿覆錛屾眰鍑哄叾鎵鏈夐暱搴︿負N鐨勫瓙涓蹭腑瀛楀吀搴忔渶灝忕殑</strong></span>銆?br><br>璁綟[x]涓?span style="COLOR: red"><strong>T涓墍鏈夎搗濮嬩綅灝忎簬N鐨勯暱搴︿負x鐨勫瓙涓蹭腑瀛楀吀搴忔渶灝忕殑瀛愪覆鐨勮搗濮嬩綅錛堣嫢鏈夊涓垯鍙栨渶宸﹁竟鐨勶級</strong></span>錛屽瀵逛簬T="abaabaaababaabaaa"錛屾湁F[0]=F[1]=0錛孎[2]=2錛孎[3]=F[4]=5……鏈鐨勭洰鐨勫氨鏄眰鍑篎[N]鐨勫箋備竴寮濮嬪凡鐭ョ殑鍙湁F[0]=0錛堥暱搴︿負0鐨勫瓧絎︿覆閮芥槸絀轟覆錛屽瓧鍏稿簭閮芥槸鏈灝忕殑錛屽彇鏈宸﹁竟鐨勭0浣嶏級銆?br><br>鍙互鍙戠幇錛孎鏁扮粍鏈夊緢澶氶噸瑕佺殑鎬ц川錛?br><span style="COLOR: #ff0000"><strong>鎬ц川1 F[0..N]鏁扮粍鏄崟璋冮掑鐨勩?/strong></span><br>璇佹槑錛氱敤鍙嶈瘉娉曘傝瀛樺湪涓涓紉(0<=x<N)浣垮緱F[x]>F[x+1]鍒欐牴鎹畾涔夛紝鏈塗[F[x+1]..F[x+1]+x]<=T[F[x]..F[x]+x]錛堣繖閲屼竴瀹氫笉浼氳秺鐣岋紝鍗矲[x]+x鐨勫間竴瀹氫笉澶т簬(2N-1)錛屽洜涓簒<N錛屽張鏍規嵁寰桭[x]<N錛屾晠F[x]+x<2N錛夛紝榪欐牱錛屽繀鏈塗[F[x+1]..F[x+1]+x-1]<=T[F[x]..F[x]+x-1]銆傜劧鑰屾牴鎹瓼[x]鐨勫畾涔夊張鍙互寰楀埌T[F[x+1]..F[x+1]+x-1]>T[F[x]..F[x]+x-1]錛堝惁鍒橣[x]鐨勫煎氨搴旇絳変簬F[x+1]鐨勫間簡錛夛紝鐭涚浘錛屾晠鍦‵[0..N]涓笉鍙兘瀛樺湪浠諱綍F[x]>F[x+1]鐨勬儏鍐碉紝涔熷嵆F[0..N]鏁扮粍鏄崟璋冮掑鐨勶紙浠ヤ笅灝咶[0..N]鏁扮粍綆縐頒負F鏁扮粍錛夈?br><span style="COLOR: #ff0000"><strong>鎬ц川2 瀵逛簬浠繪剰鍊紉(0<=x<N)錛屽繀鐒舵弧瓚矲[x+1]=F[x]鎴朏[x+1]>F[x]+x銆?/strong></span><br>璇佹槑錛氬洜涓哄墠闈㈠凡緇忚瘉鏄庝簡F鏁扮粍鏄崟璋冮掑鐨勶紝榪欓噷鍙渶璇佹槑瀵逛簬浠繪剰x(0<=x<N)錛屼笉瀛楩[x]<F[x+1]<=F[x]+x鐨勬儏鍐靛嵆鍙?br>榪欓噷鍚屾牱鐢ㄥ弽璇佹硶銆傝瀛樺湪涓涓紉(0<=x<N)浣垮緱F[x]<F[x+1]<=F[x]+x銆傚垯鏍規嵁瀹氫箟鏈塗[F[x+1]..F[x+1]+x]<T[F[x]..F[x]+x]涓擳[F[x]..F[x]+x-1]<=T[F[x+1]..F[x+1]+x-1]錛岃繖鏍峰繀鏈塗[F[x]..F[x]+x-1]=T[F[x+1]..F[x+1]+x-1]涓擳[F[x+1]+x]<T[F[x]+x]銆傝D=F[x+1]-F[x]錛屽垯T[F[x]]=T[F[x]+D]錛屽洜涓篋<=x錛屽彲寰桾[F[x]+D]=T[F[x]+2D]錛屽嵆T[F[x]]=T[F[x]+2D]銆傝繖鏍鳳紝T[F[x]..F[x]+x-D-1]=T[F[x]+2D..F[x]+x+D-1]錛涘張鍥犱負T[F[x]+x-D]=T[F[x]+x]錛岃孴[F[x+1]+x]錛堝嵆T[F[x]+x+D]]錛?lt;T[F[x]+x]錛岃繖鏍鳳紝T[F[x]+x+D]<T[F[x]+x-D]錛屼篃灝辨槸錛孴[F[x]+2D..F[x]+x+D]<T[F[x]..F[x]+x-D]錛佽繖鏍峰彲浠ュ緱鍑猴紝浠?F[x]+2D)浣嶅紑濮嬬殑浠繪剰闀垮害涓嶅皬浜?x-D)鐨勫瓙涓詫紝鍏跺瓧鍏稿簭閮藉皬浜庝粠F[x]浣嶅紑濮嬬殑鍚屾牱闀垮害鐨勫瓙涓詫紝鐢變簬F[x]<F[x+1]<=F[x]+x錛孌=F[x+1]-F[x]錛屾墍浠ユ湁1<=D<=x錛岃繖鏍鳳紝F[x]鐨勫煎氨搴旇鏄?F[x]+2D)浜嗭紝榪欐樉鐒朵笉鍙兘銆傛墍浠ワ紝涓寮濮嬪亣璁劇殑榪欑鎯呭喌鏄笉鍙兘瀛樺湪鐨勶紝鍗沖浜庝換鎰忓紉錛?<=x<N錛夛紝蹇呯劧婊¤凍F[x+1]=F[x]鎴朏[x+1]>F[x]+x銆?br><br>鏍規嵁F鏁扮粍鐨勪互涓婁袱涓ц川鍙互璁捐鍑烘湰棰樼殑綆楁硶錛?br>璁劇洰鍓嶅凡緇忔眰鍑轟簡F[0..x-1]鐨勫鹼紝涓擣[x-1]=i銆傞鍏堝皢T[0..i-1]鍏ㄩ儴鍒犲幓錛堝洜涓篎鏁扮粍鏄崟璋冮掑鐨勶紝F[x]鐨勫間竴瀹氫笉灝忎簬i錛夛紝鐒跺悗瀵筎鑷韓浣滄墿灞昁MP錛堝氨鏄互T涓烘ā鏉夸覆錛孴涓哄瓙涓茬殑鎵╁睍KMP錛岀浉褰撲簬鍏墮澶勭悊閮ㄥ垎錛夛紝涓寮濮嬪厛灝咶[x]緗負i錛岃絎琷浣嶇殑鍖歸厤闀垮害涓簄ext[j]錛岃嫢next[j]=x-1涓擳[j+x-1]<T[i+x-1]錛屽垯灝咶[x]鐨勫兼敼涓簀錛岃繖鏍鋒壂鎻忎竴閬嶏紝鍗蟲眰鍑轟簡F[x]鐨勫箋傝嫢鎵弿榪囩▼涓湭鍑虹幇浠諱綍next[j]=x-1錛屽垯璁炬墍鏈塶ext[j]鍊間笉灝忎簬x鐨勬渶灝弉ext[j]鍊間負y錛屽垯鍙互鐩存帴寰楀埌F[x..y-1]鐨勫煎潎絳変簬F[x-1]銆傚氨榪欐牱鐩村埌姹傚嚭F[N]鐨勫間負姝€?br><br>鏃墮棿澶嶆潅搴︼細O(N<span style="FONT-FAMILY: symbol">Ö</span>N)錛屽彲浠ユ牴鎹ц川2寰楀埌銆? <img src ="http://www.shnenglu.com/MatoNo1/aggbug/144852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2011-04-23 16:09 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/04/23/144852.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>RMQ闂http://www.shnenglu.com/MatoNo1/archive/2011/03/26/142289.htmlMato_No1Mato_No1Sat, 26 Mar 2011 02:13:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2011/03/26/142289.htmlhttp://www.shnenglu.com/MatoNo1/comments/142289.htmlhttp://www.shnenglu.com/MatoNo1/archive/2011/03/26/142289.html#Feedback1http://www.shnenglu.com/MatoNo1/comments/commentRss/142289.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/142289.html
銆愮綰縍MQ闂銆?br>棰樻剰錛氬浜庝竴涓簭鍒桝[1..N]錛屽叡鏈塎嬈℃彁闂紝姣忔閮芥槸闂瓵[l..r]錛?<=l<=r<=N)涓殑鏈鍊鹼紝姹傚嚭姣忔鎻愰棶鐨勭瓟妗堛?br>
錛?錛夌函鏆村姏鏋氫婦錛歄(NM)錛?br>錛?錛夋爲鐘舵暟緇勶細O(M(logN)^2)銆愯鏍戠姸鏁扮粍瑙e喅紱葷嚎RMQ闂銆?br>錛?錛塖T綆楁硶錛歄(MlogN)……
ST綆楁硶鏄熀浜庡垎鍧桪P鐨勩?br>璁綟[i][j]涓篈[i..(i+2^j-1)]錛堝叡2^j涓厓绱狅級涓殑鏈鍊鹼紙鍓嶆彁鏄笉鑳借秺鐣岋紝鍗砳+2^j-1 <= N錛夛紝鏄劇劧F鍙互閫氳繃DP鐨勬柟寮忓緱鍒幫細
F[i][j] = min||max{F[i][j-1], F[i+2^(j-1)][j-1]}
杈圭晫錛欶[i][0]=A[i]銆?br>DP姹侳鐨勫肩殑鏃墮棿澶嶆潅搴︿負O(NlogN)錛堜竴鍏卞彧鏈塏logN涓狥鍊兼湁鎰忎箟錛夛紱

鐒跺悗錛屽浜庢眰A[l..r]涓殑鏈鍊鹼紝鍙灝咥[l..r]鎷嗘垚鑻ュ共榪炵畫鐨勬錛屼嬌寰楁瘡孌電殑闀垮害閮芥槸2鐨勬暣鏁版騫傚氨琛屼簡錛屾瘮濡侫[3..28]鍙互鎷嗘垚A[3..18]銆丄[19..26]銆丄[27..28]涓夋錛岄暱搴﹀垎鍒槸16錛?^4錛夈?錛?^3錛夈?錛?^1錛夛紝鎵浠in||max{A[3..28]} = min||max{F[3][4], F[19][3], F[27][1]}銆?br>鍏抽敭鏄庝箞鎷嗭紵鏂規硶錛氭眰鍑?r-l+1)錛堝嵆A[l..r]鐨勯暱搴︼級鐨勪簩榪涘埗褰㈠紡錛岀劧鍚庝粠楂樹綅鍒頒綆浣嶄緷嬈¢亶鍘嗭紝濡傛灉鎵懼埌1浣嶅氨鍔犱笂鐩墠鐨勪綅瀵瑰簲鐨勫箓錛屽(28-3+1)=(11010)2錛屾墍浠ヤ緷嬈℃壘鍒癋[3][4]銆丗[3+2^4][3]銆丗[3+2^4+2^3][1]銆傛敞鎰忔鏃墮渶瑕侀鍏堣涓涓暟緇凚錛孊[2^i]=i錛屼互鏂逛究鎵懼埌鏌愪釜鍙栧嚭鐨勫箓瀵瑰簲鐨勬寚鏁般?br>鏄劇劧錛屾渶澶氬彧鏈塴ogN孌碉紝鎵浠ヤ竴嬈℃彁闂殑鏃墮棿澶嶆潅搴︿負O(logN)銆?br>
鍏跺疄榪樻湁涓縐嶆柟娉曪紝灝辨槸鍏堟眰鍑簂og(r-l+1)鐨勫鹼紙涓嬪彇鏁達級錛岃涓簒錛岀劧鍚嶧[l][x]鍜孎[r-2^x+1][x]涓殑杈冨ぇ/杈冨皬鍊煎氨鏄疉[l..r]涓殑鏈鍊箋傝繖鏍鳳紝涓嬈℃彁闂殑鏃墮棿澶嶆潅搴﹀氨闄嶅埌浜哋(1)銆傞棶棰樻槸錛岀郴緇焞og鍑芥暟鐏板父鎱紝涔熻綆椾竴嬈og鍑芥暟鍊肩殑鏃墮棿宸茬粡瓚呰繃浜唋ogN錛岃繖鏍鋒樉鐒跺緱涓嶅伩澶便傛墍浠ヤ粛鐒舵帹鑽愪笂闈㈢殑鏂規硶銆?br>
銆愭牳蹇冧唬鐮侊紙浠ユ眰鏈灝忓間負渚嬶紝鏈澶у肩被浼鹼級銆?br>鍒嗘娉曪細
int MIN(int l0, int r0)
{
    
int min = INF, h = l0, d0, b0;
    
for (int d = r0 - l0 + 1; d; d -= d0) {
        d0 
= d & -d; b0 = B[d0];
        
if (F[h][b0] < min) min = F[h][b0];
        h 
+= d0;
    }
    
return min;
}
姹俵og鍊兼硶錛?br>
int MIN(int l0, int r0)
{
    
int v = (int)floor(log2(r0 - l0 + 1.0)), s1 = F[l0][v], s2 = F[r0 - (1 << v) + 1][v];
    
return s1 <= s2 ? s1 : s2;
}
姹侳鏁扮粍鍊肩殑棰勫鐞嗕唬鐮侊紙娉ㄦ剰錛屽鏋滈噰鐢ㄦ眰log鍊肩殑鏂規硶灝變笉闇瑕丅鏁扮粍浜嗭級錛?br>
void prepare()
{
    re(i, n) F[i][
0= a[i];
    
int x;
    re2(j, 
1, MAXS) {
        
if ((1 << j) <= n) B[1 << j] = j;
        x 
= n - (1 << j) + 1;
        re(i, x) F[i][j] 
= min(F[i][j - 1], F[i + (1 << j - 1)][j - 1]);
    }
}

銆愬悗緇忔晥鐜囨祴璇曪紝鍙戠幇褰揘=M=100000鐨勯殢鏈烘暟鎹腑錛屼袱縐嶆柟娉曢兘鍙互鍦?.4s浠ュ唴寰楀嚭姝g‘緇撴灉錛屽叾涓璴og鍊兼硶姣斿垎孌墊硶鐣ユ參0.01s宸﹀彸錛岀浉宸笉澶э紝浣嗚冭檻鍒?#8220;灝介噺灝戜嬌鐢ㄦ暟瀛﹀嚱鏁?#8221;鐨勫師鍒欙紝浠嶆帹鑽愬垎孌墊硶銆?br>


Mato_No1 2011-03-26 10:13 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久亚洲风情| 久久久一本精品99久久精品66| 欧美福利一区二区| 亚洲美女福利视频网站| 性做久久久久久久久| 欧美片网站免费| 牛牛影视久久网| 国产一区二区三区在线免费观看| 亚洲高清不卡在线观看| 欧美一级视频| 亚洲一区网站| 亚洲电影免费观看高清完整版在线| 一区二区激情视频| 欧美精品黄色| 亚洲激情偷拍| 久久亚洲免费| 欧美怡红院视频| 国产精品成人v| 韩日精品中文字幕| 夜夜爽99久久国产综合精品女不卡| 久久久www成人免费精品| 亚洲图片欧美日产| 欧美日韩精品是欧美日韩精品| 亚洲国产国产亚洲一二三| 久久久久久电影| 亚洲免费视频在线观看| 欧美日韩另类在线| 一区二区三区成人| 亚洲欧洲在线观看| 欧美人与性动交cc0o| 最新日韩av| 欧美激情国产精品| 欧美一区二区三区免费观看 | 午夜精彩视频在线观看不卡 | 免费观看成人| 亚洲电影视频在线| 欧美国产视频一区二区| 午夜日韩av| 国产欧美va欧美va香蕉在| 先锋影音一区二区三区| 亚洲已满18点击进入久久| 国产精品嫩草99a| 欧美国产视频一区二区| 99这里有精品| 亚洲精品中文字幕女同| 久久天堂国产精品| 91久久在线视频| 亚洲精品久久视频| 欧美日韩在线视频首页| 亚洲欧美日韩一区在线观看| 午夜日韩在线| 亚洲第一伊人| 免费看的黄色欧美网站| 亚洲一区二三| 国产主播一区二区三区四区| 免费在线观看一区二区| 欧美成年人在线观看| 亚洲一区二区免费视频| 欧美亚洲一区三区| 亚洲经典自拍| 亚洲婷婷综合久久一本伊一区| 国产在线播精品第三| 亚洲国产精品国自产拍av秋霞| 久久先锋影音| 亚洲欧美中日韩| 可以看av的网站久久看| 亚洲欧美精品中文字幕在线| 久久精品人人做人人爽| 在线亚洲精品福利网址导航| 午夜精品一区二区三区四区| 亚洲国产欧美一区二区三区同亚洲| 亚洲三级观看| 韩国免费一区| 亚洲视频一区二区| 亚洲第一色在线| 亚洲尤物视频在线| 亚洲第一毛片| 亚洲国产精品久久人人爱蜜臀| 国产精品免费观看视频| 亚洲电影免费| 加勒比av一区二区| 亚洲午夜激情| 亚洲人成7777| 久久精品伊人| 亚洲精品国产拍免费91在线| 亚洲精品综合精品自拍| 精品成人一区二区| 99国产精品久久久久久久| 经典三级久久| 亚洲一区二区三区四区五区午夜 | 老司机成人网| 久久久精品网| 国产精品三上| 亚洲一区二区三区四区视频| 亚洲风情亚aⅴ在线发布| 欧美一区二区在线视频| 亚洲资源av| 欧美日本一区二区三区| 欧美大秀在线观看| 伊人久久男人天堂| 日韩视频在线播放| 亚洲精品美女在线观看播放| 久久久国产一区二区三区| 香蕉久久夜色| 性久久久久久久久久久久| 亚洲午夜黄色| 欧美日韩伊人| 一个色综合av| 亚洲男人av电影| 欧美视频免费在线| 玖玖在线精品| 极品中文字幕一区| 久久精品视频在线| 美国十次成人| 亚洲国产精品黑人久久久| 久久精品伊人| 欧美国产成人在线| 亚洲精品一区二区三区福利| 美日韩精品视频| 欧美成人一区二区| 亚洲九九精品| 欧美视频中文在线看| 亚洲国产一区视频| 一区二区三区视频在线观看 | 欧美视频一区在线| 9i看片成人免费高清| 亚洲国产二区| 欧美激情区在线播放| 一区二区日韩欧美| 久久精品日韩欧美| 尤妮丝一区二区裸体视频| 欧美成人免费大片| 99在线精品视频| 久久久久九九视频| 国产主播一区| 欧美成在线观看| 亚洲一区二区在线免费观看视频| 亚洲字幕一区二区| 韩日在线一区| 欧美丝袜一区二区| 美女网站在线免费欧美精品| 亚洲一二三四区| 亚洲黄色在线| 久久这里只有精品视频首页| 亚洲在线免费观看| 日韩视频第一页| 在线日韩av片| 国产一区二区中文| 国产精品a级| 欧美激情视频在线播放| 久久亚洲综合网| 性久久久久久久久| 亚洲一区二区三区乱码aⅴ| 亚洲激情av| 欧美激情国产日韩| 蜜桃久久精品一区二区| 久久精品123| 欧美一二三区在线观看| 亚洲尤物在线| 亚洲私人黄色宅男| 日韩手机在线导航| 亚洲精品日本| 亚洲精选久久| 最新亚洲电影| 亚洲国产老妈| 亚洲黄色视屏| 亚洲国产精品999| 亚洲国产一二三| 亚洲人www| 99在线精品视频| 制服丝袜激情欧洲亚洲| 一区二区欧美亚洲| 一区二区三区三区在线| 中国亚洲黄色| 亚洲欧美日韩精品| 午夜精品美女自拍福到在线 | 日韩一级精品视频在线观看| 亚洲国产高清在线| 亚洲精品国产精品久久清纯直播 | 亚洲免费中文| 亚洲午夜极品| 亚洲专区在线视频| 欧美一区高清| 久久视频这里只有精品| 你懂的国产精品永久在线| 欧美激情导航| 亚洲理伦电影| 亚洲综合国产激情另类一区| 欧美在线观看日本一区| 久久免费黄色| 欧美电影免费观看高清| 欧美激情综合在线| 国产精品国产精品| 国产一区深夜福利| 亚洲国产精品久久久久秋霞不卡| 亚洲黄色成人久久久| 一区二区精品| 久久精品五月| 亚洲激情欧美| 午夜激情久久久|