锘??xml version="1.0" encoding="utf-8" standalone="yes"?>无码任你躁久久久久久久,久久香综合精品久久伊人,人妻少妇久久中文字幕一区二区 http://www.shnenglu.com/MatoNo1/category/16553.htmlMato鏄竴鍙秴綰уぇ娌欒尪鈥︹︿絾浠栦竴鐩翠互鏉ラ兘鎯蟲垚涓哄悇欏規(guī)瘮璧涢兘No.1鐨勭鐘団︹?/description>zh-cnSat, 20 Oct 2012 00:12:32 GMTSat, 20 Oct 2012 00:12:32 GMT60銆怉HOI2013澶嶄粐銆慡COI2005鐨勪袱閬撴悳绱㈤鎬葷粨http://www.shnenglu.com/MatoNo1/archive/2012/10/19/193523.htmlMato_No1Mato_No1Fri, 19 Oct 2012 13:48:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/10/19/193523.htmlhttp://www.shnenglu.com/MatoNo1/comments/193523.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/10/19/193523.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/193523.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/193523.html闃呰鍏ㄦ枃

Mato_No1 2012-10-19 21:48 鍙戣〃璇勮
]]>
銆怉HOI2013澶嶄粐銆慡COI2008 澶╁鉤http://www.shnenglu.com/MatoNo1/archive/2012/09/25/191996.htmlMato_No1Mato_No1Tue, 25 Sep 2012 13:26:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/09/25/191996.htmlhttp://www.shnenglu.com/MatoNo1/comments/191996.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/09/25/191996.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/191996.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/191996.html闃呰鍏ㄦ枃

Mato_No1 2012-09-25 21:26 鍙戣〃璇勮
]]>
銆怉HOI2013澶嶄粐銆戜粠涓閬撻鏉ョ湅DFS鍙婂叾浼樺寲鐨勪竴鑸楠ゅ拰鏁扮粍鍒嗗眰闂http://www.shnenglu.com/MatoNo1/archive/2012/09/23/191708.htmlMato_No1Mato_No1Sun, 23 Sep 2012 07:16:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/09/23/191708.htmlhttp://www.shnenglu.com/MatoNo1/comments/191708.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/09/23/191708.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/191708.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/191708.htmlRQNOJ187 宸х疆鎸℃澘
———————————————————————————————————————————————————
銆愯儗鏅紙紲炵妵涓嶈鍥ц錛?x錛夈?br />鏈矙鑼舵渶榪戝紑濮嬬寷鏀繪悳绱€佽繎浼箋侀殢鏈虹瓑綆楁硶錛岀洰鏍囨槸A鎺堿HOI2012鐨勫悗3棰橈紙鍦ㄥ摢璺屽掑氨浠庡摢鐖搗錛夈傛槰澶╂櫄涓婃壘鍒拌繖棰橈紝鍙戠幇鏄悳绱紝浜庢槸寮濮嬫崏……緇撴灉琚姌鑵句簡涓鏅氫笂鍔犱竴涓婂崍鎵岮鎺夛紝涓嶈繃錛岀湅鍦ㄨ繖棰樺彲浠ョ郴緇熸х殑鍙嶆槧DFS浼樺寲鐨勪竴鑸楠わ紝蹇嶄簡……鍙﹀錛岃繖棰樻槸鏈矙鑼跺湪RQNOJ涓婇氳繃鐨勭400棰?#8230;…鍥炴兂璧烽氳繃絎?00棰樼殑鏃跺欏凡緇忔槸榪戜笁騫村崐涔嬪墠浜?#8230;…鐪熼搴熷晩……
———————————————————————————————————————————————————
鏅欴FS錛堜笉鍔犺凱浠o級鐨勪紭鍖栨柟娉曚富瑕佹湁錛?br />錛?錛夊彲琛屾у壀鏋濓紝濡傛灉閬囧埌宸茬粡鏃犳硶浜х敓鍙瑙g殑鎯呭喌灝卞壀鏋濓紝鏈夋椂鍊欙紝鍙鎬у壀鏋濅篃鍙互鎸囧湪鎼滅儲榪囩▼涓涓嶅悎娉曟儏鍐電殑鍓旈櫎錛?br />錛?錛夋渶浼樻у壀鏋濓細濡傛灉閬囧埌宸茬粡鏃犳硶浜х敓姣旂洰鍓嶅緱鍒扮殑鏈浼樿В榪樿浼樼殑瑙g殑鎯呭喌灝卞壀鏋濓紝榪欏叾涓寘鎷惎鍙戝紡鏈浼樻у壀鏋濓紙鍗沖垎鏀檺鐣岋級錛屽鐩墠瑙g殑榪涘睍鎯呭喌浣滀箰瑙備及璁★紝濡傛灉浼拌鍊奸兘涓嶈兘瓚呰秺鐩墠鐨勬渶浼樿В錛屽垯鍓灊錛?br />錛?錛夐氳繃鏀瑰彉鎼滅儲欏哄簭錛屽敖鏃╁緱鍑鴻緝浼樿В錛屼粠鑰屼負鍚庨潰鐨勫壀鏋濇彁渚涗綑鍦幫紱
錛?錛夐氳繃棰勫鐞嗙瓑鎵嬫錛屾彁鍓嶅緱鍒板惎鍙戝兼垨鑰呰緝浼樿В錛屼負鍚庨潰鐨勫壀鏋濇彁渚涗綑鍦幫紱

涓鑸楠わ細
錛?錛夐澶勭悊錛屽綋鐒舵槸鍐欏湪鏈鍓嶉潰錛屽湪鎼滅儲鍓嶅緱鍒板惎鍙戝肩瓑涓滀笢錛?br />錛?錛夋悳绱㈣繃紼嬩腑錛屽厛鍐欐渶浼樻у壀鏋濓紙鍖呮嫭宸茬粡鍒拌揪鎼滅儲緇堢偣浜嗭紝涔熷簲璇ュ垽鏂竴涓嬶紝鎻愬墠鎺掗櫎涓嶆槸鏈浼樿В鐨勬儏鍐碉級錛?br />錛?錛夊啀鍒ゅ畾鎼滅儲緇堢偣錛屽鏋滃埌浜嗭紝涔熶笉瑕侀┈涓婃洿鏂拌В錛岃屾槸瑕佸垽瀹氳繖涓В鏄惁絎﹀悎瑕佹眰錛屽啀鏇存柊錛?br />錛?錛夎嫢鏈埌緇堢偣錛屽啀鍐欏彲琛屾у壀鏋濓紱
錛?錛夋渶鍚庡啓鎼滅儲榪囩▼錛屽寘鎷渶瑕佹敼鍙樻悳绱㈤『搴忕殑鎯呭喌銆?br />
娉ㄦ剰浜嬮」錛?span style="color: red">鏁扮粍鐨勫垎灞傞棶棰樸?/strong>
榪欐槸涓涓緢涓ラ噸鐨勯棶棰橈紝鍥犱負鍒嗗眰鍑洪敊寰堝彲鑳戒細瀵艱嚧涓浜涘緢鎬殑閿欒鍑虹幇錛岄毦浠ュ彂鐜般傚湪鎼滅儲棰樼殑璋冭瘯鎶宸?/a>榪欎竴綃囦腑錛屽凡緇忔彁鍒頒簡榪欎釜闂錛屾湰棰樺張娑夊強鍒頒簡銆?br />涓鑸潵璇達紝鎼滅儲榪囩▼涓嬌鐢ㄧ殑鏁扮粍錛堝寘鎷彉閲忥紝鍙互瑙嗕負闆剁淮鏁扮粍錛夊彲浠ュ垎涓轟互涓嬩笁綾伙細
錛?錛夊湪鎼滅儲榪囩▼涓紝鍙細寮曠敤鍏跺鹼紝涓嶄細淇敼鐨勬暟緇勶紙姣斿棰勫鐞嗕腑寰楀埌鐨勯偅浜涗笢涓滐級錛岀浉褰撲簬甯擱噺錛?br />錛?錛夊湪鎼滅儲榪囩▼涓紝浼氭敼鍙樺叾鍊鹼紝浣嗗湪鎼滅儲瀹屾瘯鍚庤兘鏀瑰洖鍘熷肩殑鏁扮粍錛?br />錛?錛夊湪鎼滅儲榪囩▼涓紝浼氭敼鍙樺叾鍊鹼紝涓斿湪鎼滅儲瀹屾瘯鍚庝篃鏀逛笉鍥炲師鍊肩殑鏁扮粍銆?br />瀵逛簬錛?錛夛紙2錛夌被鏁扮粍錛屼笉闇鍒嗗眰錛屼絾瀵逛簬絎紙3錛夌被鏁扮粍涓瀹氳鍒嗗眰銆傝繖鏄洜涓鴻繖浜涙暟緇勫湪澶氬眰鎼滅儲涓兘闇瑕佷慨鏀癸紝鑰屼笖鎼滅儲瀹屼簡涔熸敼涓嶅洖鏉ワ紝濡傛灉涓嶅垎灞傦紝鍒欏綋鍚庨潰鐨勬悳绱㈠畬姣曚互鍚庯紝瑕佺戶緇悳绱㈠墠闈㈢殑錛屽紩鐢ㄧ殑灝嗘槸鍚庨潰鐨勫鹼紝灝變細鍑洪敊銆?br />瀵逛簬絎紙3錛夌被鏁扮粍錛屾湁鐨勫凡緇?#8220;鑷劧鍒嗗眰”錛堟瘡灞傛悳绱慨鏀圭殑鍏冪礌閮戒笉涓鏍鳳級錛屾瘮濡傛湰棰樹唬鐮佷腑鐨凴[][]銆丆[][]銆傜劧鑰屾湁鐨勫茍娌℃湁鑷劧鍒嗗眰錛屾瘮濡傛湰棰樼殑len銆乸os[]銆乼mp[]絳夛紝鍥犳瀵逛簬榪欎簺鏁扮粍錛岄渶瑕佸啀鍔犱竴緇達紝瀵逛簬涓嶅悓灞備嬌鐢ㄨ緇翠笉鍚岀殑鍏冪礌鍗沖彲銆?br />
涓嬮潰鏄湰棰樼殑綆楁硶錛?br />浣跨敤DFS鎼滅儲姣忎釜浣嶇疆鐨勬尅鏉挎槸鍚﹂渶瑕佹斁銆傛悳绱㈡椂錛屽厛鎼滅珫鐨勫啀鎼滄í鐨勶紝鐢變簬棰樼洰瑕佹眰姣忎釜榪為氬潡閮藉繀欏繪槸鐭╁艦錛屽洜姝ゅ浜庣珫鐨勶紝濡傛灉璇ヤ綅緗殑涓婃柟涓や釜鐩擱偦浣嶇疆鐨勬í鐨勬病鏈夊叏鏀撅紙鍖呮嫭鍙斁浜嗕竴涓級錛屽垯璇ヤ綅緗殑绔栫殑鏀句笉鏀懼彇鍐充簬鍏朵笂涓琛屽搴斾綅緗殑绔栫殑鏈夋病鏈夋斁錛堢涓琛岄櫎澶栵級錛屽鏋滀袱涓í鐨勯兘鏀句簡錛屽垯榪欓噷鐨勭珫鐨勬棦鍙互鏀句篃鍙互涓嶆斁錛堝厛鎼滀笉鏀劇殑鎯呭喌錛夈傚綋鐒訛紝涓琛岀殑涓や釜1涔嬮棿蹇呴』鑷沖皯鏈変竴涓珫鐨勶紝榪欐槸鍙鎬ч檺鍒躲傚湪鎼滄í鐨勭殑鏃跺欙紝鎸夌収璇ヨ鎵鏀劇殑绔栫殑錛屽垎鎴愯嫢騫叉錛屾樉鐒舵瘡涓孌佃涔堜笅闈㈤兘鐢ㄦí鐨勫皝涓婏紝瑕佷箞涓涓兘涓嶅皝涓娿傚叾涓紝濡傛灉璇ユ鎵鍦ㄧ殑榪為氬潡閲岄潰鏈?錛屼笖涓嬩竴琛屽搴斾綅緗篃鏈?錛屽垯蹇呴』灝佷笂錛涜嫢璇ユ鎵鍦ㄨ繛閫氬潡閲岄潰娌℃湁1錛屽垯涓嶈兘灝佷笂錛堝洜涓轟笉鑳芥湁涓涓繛閫氬潡閲屼竴涓?閮芥病鏈夛級錛屽惁鍒欏彲浠ヨ嚜鐢遍夋嫨灝佽繕鏄笉灝侊紙褰撶劧涔熸槸鍏堟悳涓嶅皝鐨勶級銆傝繖鏍蜂竴鐩存悳鍒版渶鍚庝竴琛岀殑绔栫殑鍚庯紝榪樿鍒ゆ柇鏈鍚庝竴琛屾湁娌℃湁榪為氬潡閲屾病1錛岃嫢娌℃湁錛屽垯涓轟竴涓彲琛岃В銆傚惎鍙戝紡浼樺寲錛氳D[i]涓虹i琛屽強浠ュ悗鑷沖皯瑕佸嚑涓尅鏉匡紙鑻ユ煇琛屾湁K涓?錛屽垯鑷沖皯闇瑕?K-1)涓珫鐨勶紱鑻ユ煇鍒楁湁K涓?錛屽垯鑷沖皯闇瑕?K-1)涓í鐨勶紝绱姞璧鋒潵鍗沖彲錛屾樉鐒惰繖鏄箰瑙備及璁★級錛孌[i]鍙互棰勫鐞嗗嚭鏉ワ紝褰撳仛鍚彂鍊箋?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--)
const int MAXN = 35, INF = ~0U >> 2;
int n, m, D[MAXN], len[MAXN], pos[MAXN][MAXN], tmp[MAXN][MAXN], res = INF;
bool A[MAXN][MAXN], C[MAXN][MAXN], R[MAXN][MAXN], S[MAXN][MAXN][MAXN][MAXN];
void dfs0(int No, int v, int sum, bool FF);
void init()
{
    scanf(
"%d%d"&n, &m); int x;
    re(i, n) re(j, m) {scanf(
"%d"&x); A[i][j] = x;}
}
void prepare()
{
    re(i, n) re(j, m) {
        S[i][j][i][j] 
= A[i][j];
        re2(k, i
+1, n) S[i][j][k][j] = A[k][j] || S[i][j][k - 1][j];
        re2(k, j
+1, m) S[i][j][i][k] = A[i][k] || S[i][j][i][k - 1];
        re2(k, i
+1, n) re2(k0, j+1, m) S[i][j][k][k0] = A[k][k0] || S[i][j][k - 1][k0] || S[i][j][k][k0 - 1];
    }
    
int sum;
    re(i, n) {
        D[i] 
= 0;
        re2(j, i, n) {sum 
= 0; re(k, m) if (A[j][k]) sum++if (sum) D[i] += sum - 1;}
        re(k, m) {sum 
= 0; re2(j, i, n) if (A[j][k]) sum++if (sum) D[i] += sum - 1;}
    }
}
void dfs1(int No, int v, int sum)
{
    
if (sum + D[No + 1>= res) return;
    
if (v == len[No] + 1) dfs0(No + 10, sum, 1); else if (tmp[No][v] != 1) dfs1(No, v + 1, sum); else {
        
int l, r, sum0 = sum;
        
if (v) l = pos[No][v - 1+ 1else l = 0;
        
if (v == len[No]) r = m - 1else r = pos[No][v];
        re3(j, l, r) R[No][j] 
= 0; dfs1(No, v + 1, sum);
        re3(j, l, r) {R[No][j] 
= 1; sum0++;} dfs1(No, v + 1, sum0);
    }
}
void dfs0(int No, int v, int sum, bool FF)
{
    
if (sum + D[No + 1>= res) return;
    
bool FF0; if (A[No][v]) {if (!FF) returnelse FF0 = 0;} else FF0 = FF;
    
if (v == m - 1) {
        
if (No == n - 1) {
            len[No] 
= 0; re(i, m-1if (C[No][i]) pos[No][len[No]++= i;
            
int l, r, x; bool FFF = 1;
            re3(i, 
0, len[No]) {
                
if (i) l = pos[No][i - 1+ 1else l = 0;
                
if (i == len[No]) r = m - 1else r = pos[No][i];
                x 
= 0; rre(j, No) if (R[j][l]) {x = j + 1break;}
                
if (!S[x][l][No][r]) {FFF = 0break;}
            }
            
if (FFF) res = sum;
            
return;
        }
        len[No] 
= 0; re(i, m-1if (C[No][i]) pos[No][len[No]++= i;
        
int l, r, x, sum0 = sum;
        re3(i, 
0, len[No]) {
            
if (i) l = pos[No][i - 1+ 1else l = 0;
            
if (i == len[No]) r = m - 1else r = pos[No][i];
            x 
= 0; rre(j, No) if (R[j][l]) {x = j + 1break;}
            
if (S[x][l][No][r] && S[No + 1][l][No + 1][r]) {
                tmp[No][i] 
= 2; re3(j, l, r) {sum0++; R[No][j] = 1;}
            } 
else if (S[x][l][No][r]) {
                tmp[No][i] 
= 1; re3(j, l, r) R[No][j] = 0;
            } 
else {
                tmp[No][i] 
= 0; re3(j, l, r) R[No][j] = 0;
            }
        }
        dfs1(No, 
0, sum0);
    } 
else if (No && (!R[No - 1][v] || !R[No - 1][v + 1])) {
        
if (C[No - 1][v]) {C[No][v] = 1; dfs0(No, v + 1, sum + 11);} else {C[No][v] = 0; dfs0(No, v + 1, sum, FF0);}
    } 
else {
        C[No][v] 
= 0; dfs0(No, v + 1, sum, FF0);
        C[No][v] 
= 1; dfs0(No, v + 1, sum + 11);
    }
}
void pri()
{
    printf(
"%d\n", res);
}
int main()
{
    init();
    prepare();
    dfs0(
0001);
    pri();
    
return 0;
}




Mato_No1 2012-09-23 15:16 鍙戣〃璇勮
]]>
銆怉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鏍規(guī)湰鍒頒笉浜唗錛夈傜劧鍚庯紝濡傛灉鐩存帴鐢―FS錛岀敱浜庤姹傜殑鏄K浼樿В錛岃屼笉鏄渶浼樿В錛屾墍浠ヤ笉鑳戒嬌鐢ㄦ渶浼樻у壀鏋濓紙鍖呮嫭鍒嗘敮闄愮晫錛夛紝鍥犳涓撻棬涓烘渶浼樻у壀鏋濇湇鍔$殑“鏀瑰彉鎼滅儲欏哄簭”鎶宸т篃涓嶈兘浣跨敤浜嗭紝鍥犳錛岃兘澶熶嬌鐢ㄧ殑鍙湁鍙鎬у壀鏋濓紝鑰屾湰棰樼殑鏁版嵁鑼冨洿浣垮緱榪欑綆楁硶蹇呯劧TLE銆?br />
姝hВ鏄竴縐嶇敱榪唬鍔犳繁鎬濇兂鎵╁睍寰楀埌鐨?#8220;榪唬鍙樹紭”DFS銆傝緗竴涓礬寰勯暱搴︿笂闄怹錛屾悳绱鍒皌鐨勬墍鏈夌畝鍗曡礬錛屽湪鎼滅儲榪囩▼涓紝閬囧埌闀垮害澶т簬Z鐨勮礬寰勫氨鍋滄錛堝壀鏋濓級錛岀劧鍚庯紝鑻ュ緱鍒拌礬寰勪笉瓚矺鏉★紝鍒欏鍔燴鐨勫鹼紝閲嶆柊寮濮嬫悳绱紝鐩村埌寰楀埌鐨勮礬寰勬繪暟澶т簬絳変簬K鏉′負姝€傝繖閲屽彲浠ヨ繘琛屽惎鍙戝紡鐨勪紭鍖栵紝璁緂[i]涓虹偣i鍒皌鐨勬渶鐭礬闀垮害錛屽垯鎼滅儲榪囩▼涓紝鍋囪鐩墠鎼滃埌鐐筰錛屽垯錛堢洰鍓嶈礬寰勯暱搴?g[i]錛夋槸瀵規(guī)暣鏉¤礬寰勬渶鐭暱搴︾殑涔愯浼拌錛屽鏋滆繖涓艱秴榪囦簡Z錛屽氨鍙互鍓灊錛屼絾鍦ㄥ壀鏋濅箣鍓嶈璁頒笅榪欎釜瓚呰繃浜哯鐨勫惎鍙戝鹼紝鍙栧叾涓渶灝忕殑浣滀負涓嬩竴嬈¤凱浠g殑Z鍊箋傞偅涔堝浜庡瓧鍏稿簭鑲夸箞鍔烇紵鍙互鍦ㄦ悳绱㈣繃紼嬩腑錛屽己鍒跺厛鎼滅紪鍙峰皬鐨勭粨鐐癸紝榪欐牱寰楀埌鐨剆-t璺緞蹇呯劧鏄瓧鍏稿簭閫掑鐨勩傚彟澶栧彧瑕佹眰鍑虹K鏉¤礬寰勶紝鎼滅儲灝卞彲浠ョ粓姝紝鍥犱負瀹規(guī)槗璇佹槑錛岄鐩姹傜殑絎琄鐭殑璺緞涓瀹氬凡緇忔眰鍑烘潵浜嗭紙鍙笉榪囦笉涓瀹氭槸鏈鍚庝竴鏉¤屽凡錛夛紝鎵懼埌鍗沖彲銆傛澶栵紝鍦ㄦ悳绱㈣繃紼嬩腑涓嶈蹇樹簡鍙鎬у壀鏋濓紝灝辨槸濡傛灉娌跨洰鍓嶆悳鍒扮殑璺緞宸茬粡鍒頒笉浜唗浜嗭紝鍓灊銆?br />
“榪唬鍙樹紭”DFS錛屽氨鏄緗竴涓В鐨勮瘎浠峰肩殑涓婇檺錛堟渶灝忓鹼級鎴栦笅闄愶紙鏈澶у鹼級錛屽湪鎼滅儲榪囩▼涓紝濡傛灉瀹為檯璇勪環(huán)鍊鹼紙鎴栬呭惎鍙戝鹼紝濡傛灉鍙互鍔犲惎鍙戝紡浼樺寲鐨勮瘽錛夎秺榪囪繖涓檺鍒訛紝鍒欏壀鏋濄傚湪涓嬈℃悳绱㈠悗錛屽鏋滄病鏈夊緱鍒扮鍚堣姹傜殑瑙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 鍙戣〃璇勮
]]>
鎼滅儲棰樼殑璋冭瘯鎶宸т互鍙婁竴浜涢檮鍔犲唴瀹?/title><link>http://www.shnenglu.com/MatoNo1/archive/2012/03/22/168637.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Thu, 22 Mar 2012 12:49:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2012/03/22/168637.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/168637.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2012/03/22/168637.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/168637.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/168637.html</trackback:ping><description><![CDATA[     鎽樿: 銆愯儗鏅紙紲炵妵涓嶈閯欒錛夈戞湰娌欒尪鍦ㄦ悳绱㈤鐩殑璋冭瘯涓婂凡緇忔寕榪囦袱嬈′簡錛圢OI2011鐨刧ame鐢ㄤ簡2h+鏈ㄦ湁璋冨嚭鏉ワ紝榪樿借浜嗙戶緇兂show鐨勬椂闂達紝緇撴灉琚尅鍦ㄤ簡闆嗚闃熼棬澶栵紱NOIP2011鐨刴ayan錛岀敤鏆存悳閮借皟浜?h+錛屾湪鏈夎皟鍑烘潵錛岀粨鏋滄儴鎸傦紝鍏ㄥ浗絎?00鍚嶏紝濡傛灉榪欓AC浜嗗氨鏄叏鍥藉墠50鍚?#8230;…錛夛紝涓轟簡闃叉鍦ㄦ帴涓嬫潵鐨勬瘮璧涗腑鍐嶅湪榪欓噷鎸傛帀錛屾湰娌欒尪鍐沖畾濂藉ソ鎼炰竴涓嬭繖涓傘怐FS鐨勮皟璇曟妧宸с戝...  <a href='http://www.shnenglu.com/MatoNo1/archive/2012/03/22/168637.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/MatoNo1/aggbug/168637.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> 2012-03-22 20:49 <a href="http://www.shnenglu.com/MatoNo1/archive/2012/03/22/168637.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>NOI2005 鏅烘収鐝犳父鎴?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151509.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Wed, 20 Jul 2011 15:07:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151509.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/151509.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/151509.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/151509.html</trackback:ping><description><![CDATA[     鎽樿: 銆愬師棰樿榪欓噷銆戝緢鏄庢樉鐨勭簿紜鐩栫殑妯″瀷錛?2涓浂浠訛紝鍐嶅姞涓婂畠浠粡榪囨棆杞佺炕杞悗鐨勪笉鍚屽艦鐘訛紝鍏?0縐嶏紝姣忕鍙堝彲浠ユ斁鍦ㄤ笉鍚岀殑浣嶇疆錛堝彧鐪嬫渶宸︿笂鐨勯偅涓彔瀛愶級涓縐嶉浂浠剁殑涓縐嶄綅緗氨鏄竴琛屻傚垪錛堥檺鍒訛級鏈変袱縐嶏細姣忎釜鏍煎瓙鍙兘鏀句竴涓紙55鍒楋級錛屼互鍙婃瘡涓浂浠訛紙娉ㄦ剰鏄瘡涓浂浠訛紝涓嶆槸姣忕闆朵歡錛夊彧鑳界敤涓嬈★紙12鍒楋級錛屽叡67鍒椼傞鍏堟斁鐨勯偅浜涢浂浠跺彲浠ョ湅鎴愰鍏堥変腑鐨勮銆傜劧鍚嶥LX綺劇‘瑕嗙洊鍗沖彲銆備笅闈㈡槸DLX綺劇‘瑕嗙洊鐨勫嚑涓槗鐤電偣錛氾紙1錛?..  <a href='http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151509.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/MatoNo1/aggbug/151509.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-07-20 23:07 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151509.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬DLX閲嶅瑕嗙洊鐨勮ˉ鍏?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151469.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Wed, 20 Jul 2011 04:28:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151469.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/151469.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/151469.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/151469.html</trackback:ping><description><![CDATA[<div>鏄ㄥぉ鍦ㄥ埛PKU1084鐨勬椂鍊欙紝璋冧簡寰堜箙錛屽彂鐜板師鏉ラ偅鏍峰疄鐜版湁緙洪櫡銆傦紙鍘熸潵鐨勫疄鐜拌<a title="榪欓噷" href="http://www.shnenglu.com/MatoNo1/archive/2011/04/12/144071.html">榪欓噷</a>錛?br /><br />鍦ㄩ噸澶嶈鐩栭棶棰樹腑錛屽垹鍘諱竴鏁村垪鐨勬搷浣滐紙delcol錛夋槸鏂紑璇ュ垪闄や簡鍒濆緇撶偣澶栫殑鎵鏈夌粨鐐圭殑宸﹀彸閾撅紙delLR錛夛紝榪欐牱錛屽鏋滄湁涓浜涜棰勫厛宸茶閫変腑錛屽垯鍒犲幓榪欎竴琛岋紙鍑嗙‘鏉ヨ鏄榪欎竴琛屾墍鏈夌粨鐐規(guī)墽琛宒elcol鎿嶄綔錛夛紝榪欐椂灝變細鍑虹幇闂錛屽洜涓哄湪鍒犲幓榪欎竴琛岀殑鏈鍚庝竴涓粨鐐圭殑鏃跺欙紝鍏跺乏銆佸彸閾鵑兘鎸囧悜鍏舵湰韜紝姝ゆ椂灝辨棤娉曞垹鎺夎繖涓粨鐐廣傝В鍐寵繖涓闂鐨勫姙娉曟槸闄や簡鍦ㄧ煩闃典腑寮曞叆鍒楀ご浠ュ錛岃繕瑕佸紩鍏ヨ澶達紙rowh錛夛紝騫朵笖淇濊瘉琛屽ご涓嶅垹鎺夈傝繖鏍峰湪鍒犳帀涓鏁磋鐨勬椂鍊欏氨涓嶄細鍑洪棶棰樹簡銆備絾鏄紝濡傛灉榪欐牱鐨勮瘽錛岄渶瑕佸湪鎼滅儲榪囩▼涓墽琛宒elcol鎿嶄綔鍓嶈繘琛岀壒鍒わ紝淇濊瘉涓嶅垹鎺夎澶寸粨鐐癸紙姣斿灝嗚澶寸粨鐐圭殑U銆丏鍩熺疆涓?1錛夛紝騫朵笖錛屽湪姹傚惎鍙戝嚱鏁癶()鍊肩殑鏃跺欎篃瑕侀槻姝㈠湪琛屽ご澶勫嚭鐜伴棶棰橈紝鍙互灝嗚澶寸粨鐐圭殑琛屽垪鍙峰潎緗負0銆?br /><br />鑰屽湪綺劇‘瑕嗙洊闂涓紝鍒犲幓涓鏁村垪鐨勬搷浣滄槸鏂紑緇撶偣鐨勪笂涓嬮摼鑰屼笉鏄乏鍙抽摼錛屽洜姝ゅ湪鍒犲幓涓鏁磋鏃跺氨涓嶉渶瑕佸紩鍏ヨ澶寸粨鐐廣?br /><br />涓嬮潰鏄疨KU1084鐨凙C浠g爜錛? <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">#include </span><span style="color: #000000"><</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">#define</span><span style="color: #000000"> re1(i, n) for (int i=1; i<=n; i++)</span><span style="color: #000000"><br /></span><span style="color: #0000ff">#define</span><span style="color: #000000"> re3(i, l, r) for (int i=l; i<=r; 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">60</span><span style="color: #000000">, MAXM </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">55</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"> dlnode {<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> r, c, U, D, L, R;<br />} d[(MAXN </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"> (MAXM </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">int</span><span style="color: #000000"> _n, n, m, nodes, rowh[MAXN </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">], cols[MAXM </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">], B[</span><span style="color: #000000">5</span><span style="color: #000000">][</span><span style="color: #000000">5</span><span style="color: #000000">][</span><span style="color: #000000">4</span><span style="color: #000000">], res;<br /></span><span style="color: #0000ff">bool</span><span style="color: #000000"> A[MAXN </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">], vst[MAXN];<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> init_d()<br />{<br />    re3(i, </span><span style="color: #000000">0</span><span style="color: #000000">, m) {d[i].U </span><span style="color: #000000">=</span><span style="color: #000000"> d[i].D </span><span style="color: #000000">=</span><span style="color: #000000"> i; d[i].L </span><span style="color: #000000">=</span><span style="color: #000000"> i </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; d[i].R </span><span style="color: #000000">=</span><span style="color: #000000"> i </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;} d[</span><span style="color: #000000">0</span><span style="color: #000000">].L </span><span style="color: #000000">=</span><span style="color: #000000"> m; d[m].R </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />    nodes </span><span style="color: #000000">=</span><span style="color: #000000"> m; re1(i, n) {rowh[i] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">++</span><span style="color: #000000">nodes; d[nodes].L </span><span style="color: #000000">=</span><span style="color: #000000"> d[nodes].R </span><span style="color: #000000">=</span><span style="color: #000000"> nodes; d[nodes].U </span><span style="color: #000000">=</span><span style="color: #000000"> d[nodes].D </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 />    re1(i, m) cols[i] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> add_node(</span><span style="color: #0000ff">int</span><span style="color: #000000"> r, </span><span style="color: #0000ff">int</span><span style="color: #000000"> c)<br />{<br />    cols[c]</span><span style="color: #000000">++</span><span style="color: #000000">; d[</span><span style="color: #000000">++</span><span style="color: #000000">nodes].r </span><span style="color: #000000">=</span><span style="color: #000000"> r; d[nodes].c </span><span style="color: #000000">=</span><span style="color: #000000"> c;<br />    d[nodes].U </span><span style="color: #000000">=</span><span style="color: #000000"> d[c].U; d[nodes].D </span><span style="color: #000000">=</span><span style="color: #000000"> c; d[c].U </span><span style="color: #000000">=</span><span style="color: #000000"> nodes; d[d[nodes].U].D </span><span style="color: #000000">=</span><span style="color: #000000"> nodes;<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> rh </span><span style="color: #000000">=</span><span style="color: #000000"> rowh[r]; d[nodes].L </span><span style="color: #000000">=</span><span style="color: #000000"> d[rh].L; d[nodes].R </span><span style="color: #000000">=</span><span style="color: #000000"> rh; d[rh].L </span><span style="color: #000000">=</span><span style="color: #000000"> nodes; d[d[nodes].L].R </span><span style="color: #000000">=</span><span style="color: #000000"> nodes;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> delLR(</span><span style="color: #0000ff">int</span><span style="color: #000000"> x)<br />{<br />    d[d[x].L].R </span><span style="color: #000000">=</span><span style="color: #000000"> d[x].R; d[d[x].R].L </span><span style="color: #000000">=</span><span style="color: #000000"> d[x].L;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> delUD(</span><span style="color: #0000ff">int</span><span style="color: #000000"> x)<br />{<br />    d[d[x].U].D </span><span style="color: #000000">=</span><span style="color: #000000"> d[x].D; d[d[x].D].U </span><span style="color: #000000">=</span><span style="color: #000000"> d[x].U;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> resuLR(</span><span style="color: #0000ff">int</span><span style="color: #000000"> x)<br />{<br />    d[d[x].L].R </span><span style="color: #000000">=</span><span style="color: #000000"> d[d[x].R].L </span><span style="color: #000000">=</span><span style="color: #000000"> x;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> resuUD(</span><span style="color: #0000ff">int</span><span style="color: #000000"> x)<br />{<br />    d[d[x].U].D </span><span style="color: #000000">=</span><span style="color: #000000"> d[d[x].D].U </span><span style="color: #000000">=</span><span style="color: #000000"> x;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> delcol(</span><span style="color: #0000ff">int</span><span style="color: #000000"> x)<br />{<br />    </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i</span><span style="color: #000000">=</span><span style="color: #000000">d[x].D; i </span><span style="color: #000000">!=</span><span style="color: #000000"> x; i</span><span style="color: #000000">=</span><span style="color: #000000">d[i].D) delLR(i);<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> resucol(</span><span style="color: #0000ff">int</span><span style="color: #000000"> x)<br />{<br />    </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i</span><span style="color: #000000">=</span><span style="color: #000000">d[x].U; i </span><span style="color: #000000">!=</span><span style="color: #000000"> x; i</span><span style="color: #000000">=</span><span style="color: #000000">d[i].U) resuLR(i);<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> prepare()<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> x </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />    re(i, _n) {<br />        re(j, _n) {B[i][j][</span><span style="color: #000000">0</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">++</span><span style="color: #000000">x; B[i][j][</span><span style="color: #000000">1</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> x </span><span style="color: #000000">+</span><span style="color: #000000"> _n; B[i][j][</span><span style="color: #000000">2</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> x </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">; B[i][j][</span><span style="color: #000000">3</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> x </span><span style="color: #000000">+</span><span style="color: #000000"> _n </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">;}<br />        x </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">;<br />    }<br />    x </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />    re(i, _n) re(j, _n </span><span style="color: #000000">-</span><span style="color: #000000"> i) re(k, _n </span><span style="color: #000000">-</span><span style="color: #000000"> i) {<br />        x</span><span style="color: #000000">++</span><span style="color: #000000">;<br />        re(t, i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">) {<br />            add_node(B[j][k </span><span style="color: #000000">+</span><span style="color: #000000"> t][</span><span style="color: #000000">0</span><span style="color: #000000">], x);<br />            add_node(B[j </span><span style="color: #000000">+</span><span style="color: #000000"> t][k][</span><span style="color: #000000">1</span><span style="color: #000000">], x);<br />            add_node(B[j </span><span style="color: #000000">+</span><span style="color: #000000"> t][k </span><span style="color: #000000">+</span><span style="color: #000000"> i][</span><span style="color: #000000">2</span><span style="color: #000000">], x);<br />            add_node(B[j </span><span style="color: #000000">+</span><span style="color: #000000"> i][k </span><span style="color: #000000">+</span><span style="color: #000000"> t][</span><span style="color: #000000">3</span><span style="color: #000000">], x);<br />        }<br />    }<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> rh;<br />    re1(i, n) </span><span style="color: #0000ff">if</span><span style="color: #000000"> (A[i]) {<br />        rh </span><span style="color: #000000">=</span><span style="color: #000000"> rowh[i];<br />        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> j</span><span style="color: #000000">=</span><span style="color: #000000">d[rh].R; j </span><span style="color: #000000">!=</span><span style="color: #000000"> rh; j</span><span style="color: #000000">=</span><span style="color: #000000">d[j].R) delcol(j);<br />    }<br />    res </span><span style="color: #000000">=</span><span style="color: #000000"> n;<br />}<br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> h()<br />{<br />    re1(i, m) vst[i] </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"> z </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"> i</span><span style="color: #000000">=</span><span style="color: #000000">d[</span><span style="color: #000000">0</span><span style="color: #000000">].R; i; i</span><span style="color: #000000">=</span><span style="color: #000000">d[i].R) </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">vst[i]) {z</span><span style="color: #000000">++</span><span style="color: #000000">; vst[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: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> j</span><span style="color: #000000">=</span><span style="color: #000000">d[i].D; j </span><span style="color: #000000">!=</span><span style="color: #000000"> i; j</span><span style="color: #000000">=</span><span style="color: #000000">d[j].D) </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> k</span><span style="color: #000000">=</span><span style="color: #000000">d[j].R; k </span><span style="color: #000000">!=</span><span style="color: #000000"> j; k</span><span style="color: #000000">=</span><span style="color: #000000">d[k].R) vst[d[k].c] </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">return</span><span style="color: #000000"> z;<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> dfs(</span><span style="color: #0000ff">int</span><span style="color: #000000"> dep)<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> h0 </span><span style="color: #000000">=</span><span style="color: #000000"> h(); </span><span style="color: #0000ff">if</span><span style="color: #000000"> (dep </span><span style="color: #000000">+</span><span style="color: #000000"> h0 </span><span style="color: #000000">>=</span><span style="color: #000000"> res) </span><span style="color: #0000ff">return</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"> (</span><span style="color: #000000">!</span><span style="color: #000000">h0) {res </span><span style="color: #000000">=</span><span style="color: #000000"> dep; </span><span style="color: #0000ff">return</span><span style="color: #000000">;}<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> mins </span><span style="color: #000000">=</span><span style="color: #000000"> INF, c0; </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i</span><span style="color: #000000">=</span><span style="color: #000000">d[</span><span style="color: #000000">0</span><span style="color: #000000">].R; i; i</span><span style="color: #000000">=</span><span style="color: #000000">d[i].R) </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">cols[i]) </span><span style="color: #0000ff">return</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"> (cols[i] </span><span style="color: #000000"><</span><span style="color: #000000"> mins) {mins </span><span style="color: #000000">=</span><span style="color: #000000"> cols[i]; c0 </span><span style="color: #000000">=</span><span style="color: #000000"> i;}<br />    </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i</span><span style="color: #000000">=</span><span style="color: #000000">d[c0].D; i </span><span style="color: #000000">!=</span><span style="color: #000000"> c0; i</span><span style="color: #000000">=</span><span style="color: #000000">d[i].D) {<br />        delcol(i); </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> j</span><span style="color: #000000">=</span><span style="color: #000000">d[i].R; j </span><span style="color: #000000">!=</span><span style="color: #000000"> i; j</span><span style="color: #000000">=</span><span style="color: #000000">d[j].R) </span><span style="color: #0000ff">if</span><span style="color: #000000"> (d[j].U </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">) delcol(j);<br />        dfs(dep </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">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> j</span><span style="color: #000000">=</span><span style="color: #000000">d[i].L; j </span><span style="color: #000000">!=</span><span style="color: #000000"> i; j</span><span style="color: #000000">=</span><span style="color: #000000">d[j].L) </span><span style="color: #0000ff">if</span><span style="color: #000000"> (d[j].U </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">) resucol(j); resucol(i);<br />    }<br />}<br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> main()<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> tests, _n0, x;<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">tests);<br />    re(testno, tests) {<br />        scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">&</span><span style="color: #000000">_n, </span><span style="color: #000000">&</span><span style="color: #000000">_n0);<br />        n </span><span style="color: #000000">=</span><span style="color: #000000"> _n </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: #000000"><<</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; m </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; re1(i, _n) m </span><span style="color: #000000">+=</span><span style="color: #000000"> i </span><span style="color: #000000">*</span><span style="color: #000000"> i; init_d(); re1(i, n) A[i] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />        re(i, _n0) {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); A[x] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">;}<br />        prepare();<br />        dfs(</span><span style="color: #000000">0</span><span style="color: #000000">);<br />        printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">, res);<br />    }<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 /></div><img src ="http://www.shnenglu.com/MatoNo1/aggbug/151469.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-07-20 12:28 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/07/20/151469.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鍒欒璺緞宸叉棤鐢紝鑸嶅純錛夈傜劧鍚庝粠鐐筰鎵╁睍錛屽皢鎵╁睍鍒扮殑璺緞鍏ㄩ儴鍏ラ槦銆傝繖鏍風(fēng)洿鍒扮粓鐐逛負t鐨勮礬寰勭K嬈″嚭闃熷嵆鍙?br>璇ョ畻娉曞鏄撳疄鐜幫紙鍊熷姪priority_queue錛夛紝浣嗘椂闂村鏉傚害鍙兘杈懼埌O(MK)錛岄渶瑕佷紭鍖栥?br>浼樺寲錛氬鏄撳彂鐜拌綆楁硶鍏跺疄鏈堿*鐨勬濇兂錛屾垨鑰呰錛岃綆楁硶鍏跺疄鏄墍鏈夌粨鐐圭殑浼頒環(huán)鍑芥暟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 鍙戣〃璇勮
]]>
RQNOJ P89錛孌LX閲嶅瑕嗙洊鈥︹︾粓浜嶢C浜?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/04/12/144071.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Tue, 12 Apr 2011 14:27:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/04/12/144071.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/144071.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/04/12/144071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/144071.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/144071.html</trackback:ping><description><![CDATA[<p>鏀句簡蹇?涓湀浜?#8230;…錛堝噯紜潵璇存斁浜?騫翠簡錛屾湰娌欒尪浠?騫村墠灝卞紑濮嬫崏榪欓亾鐚ョ悙棰?#8230;…錛?br>DLX閲嶅瑕嗙洊鐨勫嚑鐐硅鏄庯細<br>錛?錛夊繀欏繪湁鍚彂鍑芥暟浼樺寲錛屽惁鍒橳LE錛?br>錛?錛変笉闇瑕佷簩鍒嗕笅鐣岋紝鍙灝嗙洰鍓峟鍊鹼紙f=g+h錛屽嵆瀹為檯娣卞害鍔犱笂鍚彂鍑芥暟鍊鹼級涓庣洰鍓嶆眰寰楃殑鏈浼樿В姣旇緝鍗沖彲錛宖>=鏈浼樿В鍗沖壀鏋濓紱<br>錛?錛夊垹涓鏁村垪錛坉elcol錛夋搷浣滄椂錛屽彲浠ヤ粠浠繪剰涓涓粨鐐瑰紑濮嬪垹錛堜笉涓瀹氳鍚戠簿紜鐩栭偅鏍烽潪瑕佷粠鍒楀ご寮濮嬶級錛屼絾鏄紝寮濮嬬殑閭d釜緇撶偣涓嶅垹錛佹仮澶嶏紙resucol錛夋椂涔熶笉鎭㈠寮濮嬬殑閭d釜緇撶偣錛佽繖鏄負浜嗗湪鎺ヤ笅鏉ョ殑妯悜閬嶅巻涓笉鍙楀獎鍝嶃傜敱浜庝笉鍒犲紑濮嬬粨鐐癸紝鎵浠ュ湪灝嗘渶浼樺垪鍒犻櫎鏃訛紝闇瑕佸驚鐜竴嬈″垹闄や竴嬈★紝鎭㈠涓嬈°?br><br>浠g爜錛氾紙RQNOJ P89錛?/p> <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">#define</span><span style="COLOR: #000000"> re1(i, n) for (int i=1; i<=n; i++)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> re3(i, l, r) for (int i=l; i<=r; 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">61</span><span style="COLOR: #000000">, MAXM </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">61</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"> DLnode {<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> r, c, U, D, L, R;<br>} d[MAXN </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> MAXM];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n, m, nodes, rowh[MAXN], cols[MAXM], res </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> INF;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> init_d()<br>{<br>    re3(i, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, m) {<br>        d[i].r </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; d[i].c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; d[i].U </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[i].D </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> i; d[i].L </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">; d[i].R </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>    }<br>    d[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].L </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> m; d[m].R </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>    memset(rowh, </span><span style="COLOR: #000000">0</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: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">); memset(cols, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, m </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">2</span><span style="COLOR: #000000">); nodes </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> m </span><span style="COLOR: #000000">+</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"> add_node(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> r, </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> c)<br>{<br>    d[nodes].r </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> r; d[nodes].c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> c; d[nodes].U </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[c].U; d[nodes].D </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> c; d[c].U </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> nodes; d[d[nodes].U].D </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> nodes;<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> rh </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> rowh[r];<br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (rh) {<br>        d[nodes].L </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[rh].L; d[nodes].R </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> rh; d[rh].L </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> nodes; d[d[nodes].L].R </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> nodes;<br>    } </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> d[nodes].L </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[nodes].R </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> rowh[r] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> nodes;<br>    cols[c]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">; nodes</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>    scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">m, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">n);<br>    init_d();<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> k, x;<br>    re1(i, n) {<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">k);<br>        re(j, k) {<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); add_node(i, x);<br>        }<br>    }<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> delUD(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> x)<br>{<br>    d[d[x].U].D </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[x].D; d[d[x].D].U </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[x].U;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> resuUD(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> x)<br>{<br>    d[d[x].U].D </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[d[x].D].U </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> x;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> delLR(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> x)<br>{<br>    d[d[x].L].R </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[x].R; d[d[x].R].L </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[x].L;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> resuLR(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> x)<br>{<br>    d[d[x].L].R </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[d[x].R].L </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> x;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> delcol(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> c)<br>{<br>    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[c].D; i </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> c; i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[i].D) delLR(i);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> resucol(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> c)<br>{<br>    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[c].U; i </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> c; i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[i].U) resuLR(i);<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> h()<br>{<br>    </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> vst[MAXM]; memset(vst, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, m </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">int</span><span style="COLOR: #000000"> z </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"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].R; i; i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[i].R) </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">vst[i]) {<br>        vst[i] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">; z</span><span style="COLOR: #000000">++</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"> j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[i].D; j </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> i; j </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[j].D) </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[j].R; k </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> j; k </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[k].R) vst[d[k].c] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>    }<br>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> z;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> dfs(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> v)<br>{<br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (v </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> h() </span><span style="COLOR: #000000">>=</span><span style="COLOR: #000000"> res) </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">d[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].R) {res </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> v; </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;}<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> min </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> INF, x;<br>    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].R; i; i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[i].R) </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (cols[i] </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000"> min) {min </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> cols[i]; x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> i;}<br>    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[x].D; i </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> x; i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[i].D) {<br>        delcol(i);<br>        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[i].R; j </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> i; j </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[j].R) delcol(j);<br>        dfs(v </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">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[i].L; j </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> i; j </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> d[j].L) resucol(j);<br>        resucol(i);<br>    }<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> pri()<br>{<br>    printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, res);<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main()<br>{<br>    init();<br>    dfs(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<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>鎬葷粨錛欴LX綺劇‘瑕嗙洊鍜岄噸澶嶈鐩栧叾瀹炴槸鏈夊ぇ鐢ㄧ殑錛屽緢澶氭悳绱㈤棶棰橀兘鍙互杞寲涓鴻繖涓ょ闂錛屾晥鐜囧楂樻棤姣旓紝涓斿啓璧鋒潵涔熷緢瀹規(guī)槗錛堝彧鏄湪寤烘ā鐨勬椂鍊欏彲鑳芥湁鐐圭尌鐞愶紝涓嬮潰鐨勬ā鏉匡紝鍜岀綉緇滄祦涓鏍鳳紝10min鐨勪簨錛夛紝鑷充簬NOIP2009寮曞嚭鐨勬暟鐙郴鍒楅棶棰橈紝綺劇‘瑕嗙洊鍙互鐩存帴縐掓潃銆?br> <img src ="http://www.shnenglu.com/MatoNo1/aggbug/144071.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-12 22:27 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/04/12/144071.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.591happy.cn" target="_blank">99久久人人爽亚洲精品美女</a>| <a href="http://www.wwcx.com.cn" target="_blank">久久久精品人妻一区二区三区四 </a>| <a href="http://www.cq321.cn" target="_blank">亚洲国产精品一区二区久久</a>| <a href="http://www.ynxcm.cn" target="_blank">久久黄视频</a>| <a href="http://www.or-z.cn" target="_blank">亚洲中文精品久久久久久不卡</a>| <a href="http://www.hy-exp.cn" target="_blank">亚洲国产精品无码久久SM</a>| <a href="http://www.z8990.cn" target="_blank">97久久超碰国产精品旧版</a>| <a href="http://www.94byq.cn" target="_blank">久久国产精品二国产精品</a>| <a href="http://www.impark.cn" target="_blank">久久精品国产亚洲77777</a>| <a href="http://www.igzan.cn" target="_blank">99久久99这里只有免费的精品</a>| <a href="http://www.wcxkmm.cn" target="_blank">国产免费久久精品99久久</a>| <a href="http://www.wzqcz.cn" target="_blank">人妻无码αv中文字幕久久琪琪布</a>| <a href="http://www.yt-tongyong.cn" target="_blank">一本色道久久88精品综合</a>| <a href="http://www.jj123.com.cn" target="_blank">久久精品99久久香蕉国产色戒</a>| <a href="http://www.commonsoft.cn" target="_blank">97精品伊人久久久大香线蕉</a>| <a href="http://www.hotdee.com.cn" target="_blank">yy6080久久</a>| <a href="http://www.51xwj.cn" target="_blank">欧美国产精品久久高清</a>| <a href="http://www.bttzc.cn" target="_blank">丁香久久婷婷国产午夜视频</a>| <a href="http://www.zjyffm.cn" target="_blank">精品蜜臀久久久久99网站</a>| <a href="http://www.geigi.cn" target="_blank">一级a性色生活片久久无</a>| <a href="http://www.motorbook.com.cn" target="_blank">99久久中文字幕</a>| <a href="http://www.numxj.cn" target="_blank">亚洲午夜精品久久久久久人妖</a>| <a href="http://www.qqzhuti.cn" target="_blank">久久久WWW成人</a>| <a href="http://www.p3gp.cn" target="_blank">久久精品国产亚洲7777</a>| <a href="http://www.baojingqi88.org.cn" target="_blank">亚洲精品高清国产一久久</a>| <a href="http://www.foxconm.cn" target="_blank">国产激情久久久久影院小草 </a>| <a href="http://www.zheiwa.cn" target="_blank">国产麻豆精品久久一二三</a>| <a href="http://www.gold160.cn" target="_blank">国产精品久久亚洲不卡动漫</a>| <a href="http://www.matchweb.cn" target="_blank">亚洲精品久久久www</a>| <a href="http://www.dengbilong6.com.cn" target="_blank">国产综合久久久久</a>| <a href="http://www.bukrrlg.cn" target="_blank">精品久久久久久久久中文字幕</a>| <a href="http://www.hx85.cn" target="_blank">精品人妻伦一二三区久久</a>| <a href="http://www.talkvo.cn" target="_blank">久久国产一片免费观看</a>| <a href="http://www.qpzv.cn" target="_blank">国产精品久久久久久搜索</a>| <a href="http://www.kou365.cn" target="_blank">四虎国产精品免费久久久</a>| <a href="http://www.2782yh.cn" target="_blank">性高朝久久久久久久久久</a>| <a href="http://www.wenlitown.cn" target="_blank">久久国产乱子伦免费精品</a>| <a href="http://www.zghart.cn" target="_blank">久久国产精品77777</a>| <a href="http://www.83601.com.cn" target="_blank">久久精品国产欧美日韩</a>| <a href="http://www.ichz.cn" target="_blank">久久久精品人妻一区二区三区蜜桃 </a>| <a href="http://www.mb71.cn" target="_blank">中文字幕乱码久久午夜</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>