锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏆戝亣錛屽幓浜嗚稛騫垮窞瀹炰範錛屽洖鏉ュ悗灝卞埌瀛︽牎寮濮嬬渷璧涚殑闆嗚銆備粠鍏湀鍗佹棩鍙峰埌鐜板湪錛屾垜鍦ㄤ笉鍒嗙櫧澶╅粦澶滅殑鏁查錛屽綆楁硶銆傘婄畻娉曞璁恒嬪凡琚垜鍊熶簡蹇竴騫翠簡銆?
涓璺蛋鏉ワ紝鎰熸叏棰囧錛屾湁蹇冮吀錛屼篃鏈夊揩涔愩?/span>
鏈夋椂浼氬洜涓烘彁浜や竴涓鐩紝浠庢棭涓婁竴鐩碬A
鐪佽禌涔嬪墠錛屽鏍¤繕鏈夊嚑涓槦鍛樻湁鐨勬椂鍊欎氦嫻佷竴涓嬶紝鑰岀幇鍦ㄥ氨鍙湁鎴戠殑浼欎即涔熷彧鏈夌櫨搴﹀拰璋鋒瓕銆?
鐪佽禌錛屾棭宸查瑙佺殑緇撴灉錛屾垜瑕佺殑鍙槸鐨勮繘姝ャ?
瑙佽瘑榪囧緢澶氱墰浜猴紝瀛︿範浜嗗緢澶氱殑綆楁硶錛屼篃鏁茶繃涓婁竾琛岀殑浠g爜銆?
鍦ㄦ箹澶х殑緗戠珯涓婃暡浜?50
鍦ㄧ畻娉曠殑嫻鋒磱閲岋紝鎴戣繖灝忓皬鐨勮湕鐗涳紝涔熷彧鏈変竴澶╀竴澶╃殑鍔姏寰涓婄埇錛屼笉鐭ラ亾浣曟椂鎵嶈兘鐪嬪埌閭d簺鐏跨儌鐨勯槼鍏夈?
涔熻錛岄槼鍏夋棭宸叉磼钀藉湪榪囩▼閲屼簡銆?
鏈夋椂鍊欎細鎯籌紝濡傛灉鎴戞棭涓鐐規帴瑙CM,
鍙槸鐢熸椿娌℃湁濡傛灉錛屽垰寮濮嬬浉鎭嬶紝鎴戝氨瑕佹瘯涓氫簡銆?
鏈変簺閬楁喚錛屼絾涔熶笉鎮旓紝鍦ㄦ垜鏈夌敓涔嬪勾錛屼負涔嬪鏂楄繃銆?
浜?nbsp; 鐢熸椿
寰堝皯鍘諱笂璇撅紝浼拌姣忚妭璇懼嚭鍕ょ殑鍚屽涓嶄細瓚呰繃涓や綅鏁般?
浣嗘垜寰堢弽鎯滆繖孌墊渶鍚庣殑瀛︽牎鐢熸椿錛屽彲浠ヨ垝鏈嶇殑鐫¤錛屽彲浠ヨ嚜鐢辯殑鏁查錛屽彲浠ヨ交鏉劇殑鍐欏瓧錛屽彲浠ヤ笉綆¢偅浜涘叧浜庣粡嫻庡嵄鏈鴻屽甫鏉ョ殑灝變笟鍗辨満錛屽彲浠ユ斁鑲嗙殑鍍忎釜瀛╁瓙銆?
鑷沖皯鍦ㄦ病鏈夋瘯涓氫箣鍓嶆垜榪樻槸涓涓鐢燂紝浣嗗緢蹇氨涓嶆槸浜嗐?
璧板叆紺句細錛屽伐浣滐紝鎴戝氨瑕佹壙鎷呰搗涓浠借矗浠諱簡銆備翰鐖辯殑鐖哥埜濡堝錛屼負浜嗘垜鑻︿簡澶у崐杈堝瓙銆傛垜瑕佸姫鍔涙專閽憋紝璁╂垜浠殑鏃ュ瓙榪囩殑濂界偣銆?
鏈嬪弸浠紝榪欐鑱旂郴灝戜簡錛屽叾瀹炴垜涔熶笉鎯寵繖鏍楓?
澶╁喎浜嗭紝鏁村ぉ涓涓漢瀵硅繖鐢佃剳錛屾湁鐐規兂鍥炲浜嗐?
鐢熸椿寰堢畝鍗曪紝姣忓ぉ鐫″埌涔濈偣璧峰簥錛屽繖媧諱竴涓嬪崼鐢燂紝灝卞紑鐢佃剳錛屽湪鍖楀ぇ鐨勯嫻烽噷閬ㄦ父浜嗭紝鏃犺竟鏃犻檯銆?
涓崍錛屽寙蹇欑殑鍚冧釜蹇銆傛場鏉挅鍟★紝鎵撳紑紿楀笜錛屾檼浼氬効澶槼錛岀戶緇仛棰樸?
鏅氫笂鐨勬椂鍊欙紝璺戝埌瀛︽牎椋熷爞鍚冮】楗傜劧鍚庡湪澶滃箷涓嬶紝涓涓漢娓歌崱銆?
鎴戝緢鍠滄鍘繪搷鍦猴紝閭d簺絀烘椃涓庡瘋瀵ワ紝鏄媯嬈㈣繃鍚庝竴涓漢鎮蹭激銆傚惉鐫騫挎挱閲屻婃棆鏈ㄣ嬶紝鐜嬭彶鐨勭┖鐏典笌綰補銆?
鏋佺洰榪滅満錛屽寳鏂圭殑澶╃┖鏈変袱棰楅棯浜殑鏄熸槦錛屼笉鐭ラ亾浠栦滑闅斾簡鏈夊榪滐紝鏈夋病鏈夎璇佽繃鎵璋撶殑姘告亽銆?
鍥炴潵鍚庯紝緇х畫鏁查榪囧崍澶溿?
涓轟粈涔堟垜浼氭潵鍒拌繖涓槦鐞冧笂錛屽茍涓旀槸榪熶笉鏉ワ紝鏅氫笉鏉ワ紝鍋忓亸鍦ㄨ繖涓椂鍊欐潵浜嗗憿錛?
鍦ㄦ垜娌℃潵鍒拌繖涓笘鐣屾潵涔嬪墠鐨勯偅涔堝騫達紝涓栫晫鏄釜浠涔堟牱瀛愬憿錛熷巻鍙蹭笂閭d箞澶氱殑浜猴紝浠栦滑閮芥浜嗭紝鍒板簳浠栦滑鏈夎繃鎬庢牱鐨勭敓媧伙紵
鏄粈涔堝姏閲忎駭鐢熶簡鐢熷懡錛熸庝箞灝辨湁浜嗘垜錛?澶濂囦簡錛?wbr>
鏈潵浼氬彉鎴愪粈涔堟牱瀛愬憿錛熶竴鐧懼勾錛屼竴鍗冨勾錛屽埌鏃跺欐垜浠兘涓嶅湪浜嗐?
涓鎯沖埌鎴戜滑閮戒細姝伙紝灝變細寰堟偛浼わ紝閭d簺鏃犲彲濂堜綍鐨勬偛浼ゃ?
浠ュ墠浠庢潵鎯寵繃鐨勯棶棰橈紝闅忕潃鐖風埛濂跺ザ鐨勫幓涓栵紝涔呬箙鐨勪細鍦ㄥ績閲岀紶緇曠潃銆?
鎮蹭激錛屾槸鍥犱負瀹蟲曠潃澶卞幓銆?
涔熻錛屾椿鐫灝變粎浠呭彧鏄負浜嗘椿鐫鑰屾椿鐫錛屼竴鍦烘父鎴忎竴鍦烘ⅵ錛岀閭d箞澶氬共鍢涘憿錛?nbsp;
鏈夋ⅵ灝卞仛錛屾湁閰掑氨閱夛紝鐥涚棝蹇揩鐨勫湪榪欎釜涓栫晫璧頒竴閬惂銆?wbr>
濡堝鐨勭敓鏃ュ揩鍒頒簡錛屽噯澶囩粰濂硅佷漢瀹墮佷竴浠界ぜ鐗┿?
鎵撶畻鐫鍐嶆暡涓や釜鏈堥錛屽姫鍔涚殑鍚戠墰鐪嬮綈錛屼笉瑕侀偅涔堣彍灝辮銆?
鑰佸緇撳浜嗭紝鎵撶畻鍒板寳浜幓鐪嬬湅浠栦滑銆?
鎵撶畻鐫鏄庡勾姣曚笟瀹炰範錛屾瘯涓氳璁★紝鎵懼伐浣溿?
鎵撶畻涓嶈鍘繪墦鐤插姵鎴樻湳浜嗭紝寰楀ソ濂界殑閿葷偧涓涓嬭韓浣撱?
鎵撶畻璋冩暣濂界敓鐗╅挓錛屽崄浜岀偣浠ュ墠涓瀹氫笂搴婄潯瑙夈?
鎵撶畻鐫閫変釜闃沖厜鐏跨儌鐨勬棩瀛愶紝濂藉ソ鐨勫嚭鍘昏蛋璧扮帺鐜┿傝繖浜涘ぉ澶╂皵寰堝ソ錛屼絾涓鐩磋垗涓嶅緱錛屾椂闂村緢涓嶅鐢ㄣ?
鎵撶畻濂藉ソ鐨勬暡棰橈紝濂藉ソ鐨勫涔狅紝濂藉ソ鐨勭敓媧伙紝濂藉ソ鐨勫緟鐢熷懡涓亣鍒扮殑姣忎竴涓漢銆?
鐜板湪鎵撶畻鐫椹笂鍏崇數鑴戜笂搴婄潯瑙夈?wbr>
]]>
//鍏抽敭鏄湪浜庡尯闂寸瘡璁$殑鏃跺欎竴涓伓鏁板熀鏁扮殑闂
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{ int test,n,i,j;
int s[200],t[200],used[200];
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
scanf("%d",&test);
while(test--)
{ scanf("%d",&n);
memset(used,0,sizeof(used));
for(i=0;i<n;i++)
scanf("%d%d",&s[i],&t[i]);
for(i=0;i<n;i++)
{ if(s[i]>t[i])
swap(s[i],t[i]);
if(s[i]%2==0)
s[i]--;
s[i]=s[i]/2;
if(t[i]%2==0)
t[i]--;
t[i]=t[i]/2;
for(j=s[i];j<=t[i];j++)
used[j]++;
}
sort(used,used+200);
printf("%d\n",used[199]*10);
}
return 0;
}
]]>
//鏈灝忓壊瀹氱悊鏄竴涓簩鍒嗗浘涓緢閲嶈鐨勫畾鐞嗭紞錛嶏紞涓涓簩鍒嗗浘涓殑鏈澶у尮閰嶆暟絳変簬榪欎釜鍥句腑鐨勬渶灝忕偣瑕嗙洊鏁般?wbr>
//鏈灝忕偣瑕嗙洊錛氬亣濡傞変簡涓涓偣灝辯浉褰撲簬瑕嗙洊浜嗕互瀹冧負绔偣鐨勬墍鏈夎竟錛屼綘闇瑕侀夋嫨鏈灝戠殑鐐規潵瑕嗙洊鎵鏈夌殑杈?
#include<iostream>
using namespace std;
int n,m,res;
int l[500],r[500],map[500][500],used[500];
bool path(int u)
{int v;
for(v=0;v<n;v++)
if(map[u][v] && !used[v])
{used[v]=1;
if(r[v]==-1 || path(r[v]))
{ l[u]=v;
r[v]=u;
return true;
}
}
return false;
}
void solve()
{ int i;
memset(l,-1,sizeof(l));
memset(r,-1,sizeof(r));
for(i=0;i<n;i++)
if(l[i]==-1)
{ memset(used,0,sizeof(used));
if(path(i))
res++;
}
}
int main()
{ int i,a,b;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
while((scanf("%d%d",&n,&m))!=EOF)
{ memset(map,0,sizeof(map));
for(i=0;i<m;i++)
{ scanf("%d%d",&a,&b);
map[a-1][b-1]=1;
}
res=0;
solve();
cout<<res<<endl;
}
return 0;
}
]]>
//鐗圭偣涓嶉渶瑕佸緩妯★紝鍘熺悊榪樻槸鏈寸礌鏈澶ф祦鍘熺悊錛屽鎵懼騫胯礬寰勭敤DFS,濡傛壘鍒頒竴鏉″騫胯礬寰勶紝娌胯礬杈瑰彇鍙?wbr>
#include<iostream>
using namespace std;
int n,m,res;
int l[300],r[300],map[300][300],used[300];
bool path(int u)
{int v;
for(v=0;v<m;v++)
if(map[u][v] && !used[v])
{used[v]=1;
if(r[v]==-1 || path(r[v]))
{ l[u]=v;
r[v]=u;
return true;
}
}
return false;
}
void solve()
{ int i;
memset(l,-1,sizeof(l));
memset(r,-1,sizeof(r));
for(i=0;i<n;i++)
if(l[i]==-1)
{ memset(used,0,sizeof(used));
if(path(i))
res++;
}
}
int main()
{ int Case,i,j,k,temp;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
scanf("%d",&Case);
while(Case--)
{ memset(map,0,sizeof(map));
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{ scanf("%d",&k);
for(j=0;j<k;j++)
{scanf("%d",&temp);
map[i][temp-1]=1;
}
}
res=0;
solve();
if(res==n)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
浠涔堟槸浜屽垎鍥撅紝浠涔堟槸浜屽垎鍥劇殑鏈澶у尮閰嶏紝榪欎簺瀹氫箟鎴戝氨涓嶈浜嗭紝緗戜笂闅忎究閮芥壘寰楀埌銆備簩鍒嗗浘鐨勬渶澶у尮閰嶆湁涓ょ姹傛硶錛岀涓縐嶆槸鏈澶ф祦錛堟垜鍦ㄦ鍋囪璇昏呭凡鏈夌綉緇滄祦鐨勭煡璇嗭級錛涚浜岀灝辨槸鎴戠幇鍦ㄨ璁茬殑鍖堢墮鍒╃畻娉曘傝繖涓畻娉曡鐧戒簡灝辨槸鏈澶ф祦鐨勭畻娉曪紝浣嗘槸瀹冭窡鎹簩鍒嗗浘鍖歸厤榪欎釜闂鐨勭壒鐐癸紝鎶婃渶澶ф祦綆楁硶鍋氫簡綆鍖栵紝鎻愰珮浜嗘晥鐜囥傚寛鐗欏埄綆楁硶鍏跺疄寰堢畝鍗曪紝浣嗘槸緗戜笂鎼滀笉鍒頒粈涔堣寰楁竻妤氱殑鏂囩珷銆傛墍浠ユ垜鍐沖畾瑕佸啓涓涓嬨?br>鏈澶ф祦綆楁硶鐨勬牳蹇冮棶棰樺氨鏄壘澧炲箍璺緞錛坅ugment path錛夈傚寛鐗欏埄綆楁硶涔熶笉渚嬪錛屽畠鐨勫熀鏈ā寮忓氨鏄細
鍙鍜屾渶澶ф祦綆楁硶鏄竴鏍風殑銆備絾鏄繖閲岀殑澧炲箍璺緞灝辨湁瀹冧竴瀹氱殑鐗規畩鎬э紝涓嬮潰鎴戞潵鍒嗘瀽涓涓嬨?br>錛堟敞錛氬寛鐗欏埄綆楁硶铏界劧鏍規湰涓婃槸鏈澶ф祦綆楁硶錛屼絾鏄畠涓嶉渶瑕佸緩緗戠粶妯″瀷錛屾墍浠ュ浘涓笉鍐嶉渶瑕佹簮鐐瑰拰姹囩偣錛屼粎浠呮槸涓涓簩鍒嗗浘銆傛瘡鏉¤竟涔熶笉闇瑕佹湁鏂瑰悜銆傦級


鍥?鏄垜緇欏嚭鐨勪簩鍒嗗浘涓殑涓涓尮閰嶏細錛?錛?錛藉拰錛?錛?錛姐傚浘2灝辨槸鍦ㄨ繖涓尮閰嶇殑鍩虹涓婃壘鍒扮殑涓鏉″騫胯礬寰勶細3->6->2->5->1->4銆?wbr>
(1)鏈夊鏁版潯杈廣?br>(2)璧風偣鍦ㄤ簩鍒嗗浘鐨勫乏鍗婅竟錛岀粓鐐瑰湪鍙沖崐杈廣?br>(3)璺緞涓婄殑鐐逛竴瀹氭槸涓涓湪宸﹀崐杈癸紝涓涓湪鍙沖崐杈癸紝浜ゆ浛鍑虹幇銆傦紙鍏跺疄浜屽垎鍥劇殑鎬ц川灝卞喅瀹氫簡榪欎竴鐐癸紝鍥犱負浜屽垎鍥懼悓涓杈圭殑鐐逛箣闂存病鏈夎竟鐩歌繛錛屼笉瑕佸繕璁板摝銆傦級
(4)鏁存潯璺緞涓婃病鏈夐噸澶嶇殑鐐廣?br>(5)璧風偣鍜岀粓鐐歸兘鏄洰鍓嶈繕娌℃湁閰嶅鐨勭偣錛岃屽叾瀹冩墍鏈夌偣閮芥槸宸茬粡閰嶅ソ瀵圭殑銆傦紙濡傚浘1銆佸浘2鎵紺猴紝錛?錛?錛藉拰錛?錛?錛藉湪鍥?涓槸涓ゅ宸茬粡閰嶅ソ瀵圭殑鐐癸紱鑰岃搗鐐?鍜岀粓鐐?鐩墠榪樻病鏈変笌鍏跺畠鐐歸厤瀵廣傦級
(6)璺緞涓婄殑鎵鏈夌濂囨暟鏉¤竟閮戒笉鍦ㄥ師鍖歸厤涓紝鎵鏈夌鍋舵暟鏉¤竟閮藉嚭鐜板湪鍘熷尮閰嶄腑銆傦紙濡傚浘1銆佸浘2鎵紺猴紝鍘熸湁鐨勫尮閰嶆槸錛?錛?錛藉拰錛?錛?錛斤紝榪欎袱鏉¢厤鍖圭殑杈瑰湪鍥?緇欏嚭鐨勫騫胯礬寰勪腑鍒嗚竟鏄2鍜岀4鏉¤竟銆傝屽騫胯礬寰勭殑絎?銆?銆?鏉¤竟閮芥病鏈夊嚭鐜板湪鍥?緇欏嚭鐨勫尮閰嶄腑銆傦級
(7)鏈鍚庯紝涔熸槸鏈閲嶈鐨勪竴鏉★紝鎶婂騫胯礬寰勪笂鐨勬墍鏈夌濂囨暟鏉¤竟鍔犲叆鍒板師鍖歸厤涓幓錛屽茍鎶婂騫胯礬寰勪腑鐨勬墍鏈夌鍋舵暟鏉¤竟浠庡師鍖歸厤涓垹闄わ紙榪欎釜鎿嶄綔縐頒負澧炲箍璺緞鐨?wbr>鍙栧弽
涓嶉毦鎯抽氾紝鍦ㄦ渶鍒濆鏃訛紝榪樻病鏈変換浣曞尮閰嶆椂錛屽浘1涓殑涓ゆ潯鐏拌壊鐨勮竟鏈韓涔熸槸澧炲箍璺緞銆傚洜姝ゅ湪榪欏紶浜屽垎鍥句腑瀵繪壘鏈澶ч厤鍖圭殑榪囩▼鍙兘濡備笅錛?br>
(1)鎵懼埌澧炲箍璺緞1->5錛屾妸瀹冨彇鍙嶏紝鍒欏尮閰嶆暟澧炲姞鍒?銆?br>(2)鎵懼埌澧炲箍璺緞2->6錛屾妸瀹冨彇鍙嶏紝鍒欏尮閰嶆暟澧炲姞鍒?銆?br>(3)鎵懼埌澧炲箍璺緞3->6->2->5->1->4錛屾妸瀹冨彇鍙嶏紝鍒欏尮閰嶆暟澧炲姞鍒?銆?br>(4)鍐嶄篃鎵句笉鍒板騫胯礬寰勶紝緇撴潫銆?br>
褰撶劧錛岃繖鍙槸涓縐嶅彲鑳界殑嫻佺▼銆備篃鍙兘鏈夊埆鐨勬壘澧炲箍璺緞鐨勯『搴忥紝鎴栬呮壘鍒頒笉鍚岀殑澧炲箍璺緞錛屾渶緇堢殑鍖歸厤鏂規涔熷彲鑳戒笉涓鏍楓備絾鏄渶澶у尮閰嶆暟涓瀹氶兘鏄浉鍚岀殑銆?br>
瀵逛簬澧炲箍璺緞榪樺彲浠ョ敤涓涓掑綊鐨勬柟娉曟潵鎻忚堪銆傝繖涓弿榪頒笉涓瀹氭渶鍑嗙‘錛屼絾鏄畠鎻ず浜嗗鎵懼騫胯礬寰勭殑涓鑸柟娉曪細
“浠庣偣A鍑哄彂鐨勫騫胯礬寰?#8221;涓瀹氶鍏堣繛鍚戜竴涓湪鍘熷尮閰嶄腑娌℃湁涓庣偣A閰嶅鐨勭偣B銆傚鏋滅偣B鍦ㄥ師鍖歸厤涓病鏈変笌浠諱綍鐐歸厤瀵癸紝鍒欏畠灝辨槸榪欐潯澧炲箍璺緞鐨勭粓鐐癸紱鍙嶄箣錛屽鏋滅偣B宸蹭笌鐐笴閰嶅錛岄偅涔堣繖鏉″騫胯礬寰勫氨鏄粠A鍒癇錛屽啀浠嶣鍒癈錛屽啀鍔犱笂“浠庣偣C鍑哄彂鐨勫騫胯礬寰?#8221;銆傚茍涓旓紝榪欐潯浠嶤鍑哄彂鐨勫騫胯礬寰勪腑涓嶈兘涓庡墠鍗婇儴鍒嗙殑澧炲箍璺緞鏈夐噸澶嶇殑鐐廣?br>
姣斿鍥?涓紝鎴戜滑瑕佸鎵句竴鏉′粠3鍑哄彂鐨勫騫胯礬寰勶紝瑕佸仛浠ヤ笅3姝ワ細
(1)棣栧厛浠?鍑哄彂錛屽畠鑳借繛鍒扮殑鐐瑰彧鏈?錛岃?鍦ㄥ浘1涓凡緇忎笌2閰嶅錛屾墍浠ョ洰鍓嶇殑澧炲箍璺緞灝辨槸3->6->2鍐嶅姞涓婁粠2鍑哄彂鐨勫騫胯礬寰勩?br>(2)浠?鍑哄彂錛屽畠鑳借繛鍒扮殑涓嶄笌鍓嶅崐閮ㄥ垎璺緞閲嶅鐨勭偣鍙湁5錛岃屼笖5紜疄鍦ㄥ師鍖歸厤涓病鏈変笌2閰嶅銆傛墍浠ヤ粠2榪炲埌5銆備絾5鍦ㄥ浘1涓凡緇忎笌1閰嶅錛屾墍浠ョ洰鍓嶇殑澧炲箍璺緞涓?->6->2->5->1鍐嶅姞涓婁粠1鍑哄彂鐨勫騫胯礬寰勩?br>(3)浠?鍑哄彂錛岃兘榪炲埌鐨勪笉涓庤嚜宸查厤瀵瑰茍涓斾笉涓庡墠鍗婇儴鍒嗚礬寰勯噸澶嶇殑鐐瑰彧鏈?銆傚洜涓?鍦ㄥ浘1涓病鏈変笌浠諱綍鐐歸厤瀵癸紝鎵浠ュ畠灝辨槸緇堢偣銆傛墍浠ユ渶緇堢殑澧炲箍璺緞鏄?->6->2->5->1->4銆?br>
浣嗘槸涓ユ牸鍦拌錛屼互涓婅繃紼嬩腑浠?鍑哄彂鐨勫騫胯礬寰勶紙2->5->1->4錛夊拰浠?鍑哄彂鐨勫騫胯礬寰勶紙1->4錛夊茍涓嶆槸鐪熸鐨勫騫胯礬寰勩傚洜涓哄畠浠笉絎﹀悎鍓嶉潰璁茶繃鐨勫騫胯礬寰勭殑絎?鏉℃ц川錛屽畠浠殑璧風偣閮芥槸宸茬粡閰嶈繃瀵圭殑鐐廣傛垜浠湪榪欓噷縐板畠浠負“澧炲箍璺緞”鍙槸涓轟簡鏂逛究璇存槑鏁翠釜鎼滃鐨勮繃紼嬨傝岃繖涓ゆ潯璺緞鏈韓鍙兘綆楁槸涓や釜涓嶄負澶栫晫鎵鐭ョ殑瀛愯繃紼嬬殑榪斿洖緇撴灉銆?br>鏄劇劧錛屼粠涓婇潰鐨勪緥瀛愬彲浠ョ湅鍑猴紝鎼滃澧炲箍璺緞鐨勬柟娉曞氨鏄疍FS錛屽彲浠ュ啓鎴愪竴涓掑綊鍑芥暟銆傚綋鐒訛紝鐢˙FS涔熷畬鍏ㄥ彲浠ュ疄鐜般?br>
鑷蟲錛岀悊璁哄熀紜閮ㄤ喚璁插畬浜嗐備絾鏄瀹屾垚鍖堢墮鍒╃畻娉曪紝榪橀渶瑕佷竴涓噸瑕佺殑瀹氱悊錛?br>
濡傛灉浠庝竴涓偣A鍑哄彂錛屾病鏈夋壘鍒板騫胯礬寰勶紝閭d箞鏃犺鍐嶄粠鍒殑鐐瑰嚭鍙戞壘鍒板灝戝騫胯礬寰勬潵鏀瑰彉鐜板湪鐨勫尮閰嶏紝浠嶢鍑哄彂閮芥案榪滄壘涓嶅埌澧炲箍璺緞銆?br>
鍒濆鏃舵渶澶у尮閰嶄負絀?br>for 浜屽垎鍥懼乏鍗婅竟鐨勬瘡涓偣i
do 浠庣偣i鍑哄彂瀵繪壘澧炲箍璺緞銆傚鏋滄壘鍒幫紝鍒欐妸瀹冨彇鍙嶏紙鍗沖鍔犱簡鎬諱簡鍖歸厤鏁幫級銆?wbr>
濡傛灉浜屽垎鍥劇殑宸﹀崐杈逛竴鍏辨湁n涓偣錛岄偅涔堟渶澶氭壘n鏉″騫胯礬寰勩傚鏋滃浘涓叡鏈塵鏉¤竟錛岄偅涔堟瘡鎵句竴鏉″騫胯礬寰勶紙DFS鎴朆FS錛夋椂鏈澶氭妸鎵鏈夎竟閬嶅巻涓閬嶏紝鎵鑺辨椂闂翠篃灝辨槸m銆傛墍浠ユ葷殑鏃墮棿澶ф灝辨槸O錛坣 * m錛夈?br>
]]>
//涓涓暟緇勬病鏈夊垵濮嬪寲錛寃rong浜哊嬈?wbr>
//寰堝浜洪兘鏄敤鍖堢墮鍒╃畻娉曞仛鐨勶紝鍋朵篃鍑嗗瀛﹀浼犺涓殑鍖堢墮鍒╃畻娉?wbr>
#include<iostream>
using namespace std;
int h,w,flag,res,node;
int arr[500][500],map[50][20];
int q[10000],pre[10000],used[500];
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
int path(int s) //瀵繪壘澧炲箍璺緞
{ int u,head,tail,temp,i,j;
head=tail=0;
q[tail++]=s;
used[s]=1;
while(head<tail)
{ temp=tail;
for(i=head;i<temp;i++)
{ u=q[i];
if(u==1)
return 1;
for(j=0;j<node;j++)
if(used[j]==0 && arr[u][j]>0)
{pre[j]=u;
used[j]=1;
q[tail++]=j;
}
}
head=temp;
}
return 0;
}
void ford_fulkerson() //淇敼澧炲厜璺緞涓婅竟鐨勬畫鐣欏閲忥紝璁板綍鍖歸厤鐨勭粨鏋?br>{ int i,j,u,v,min,x,y;
min=INT_MAX;
u=pre[1];
v=1;
while(u>=0)
{if(arr[u][v]<min)
min=arr[u][v];
v=u;
u=pre[u];
}
u=pre[1];
v=1;
while(u>=0)
{ arr[u][v]=arr[u][v]-min;
arr[v][u]=arr[v][u]+min;
v=u;
u=pre[u];
}
res=res+min;
}
int main()
{int i,j,k,Case,x,y;
char c;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
scanf("%d",&Case);
while(Case--)
{ flag=0;
res=0;
node=2;
scanf("%d%d",&h,&w);
memset(map,0,sizeof(map));
memset(used,0,sizeof(used));
memset(arr,0,sizeof(arr));
for(i=0;i<h;i++)
{getchar();
for(j=0;j<w;j++)
{ scanf("%c",&c);
if(c=='*')
map[i][j]=node++;
}
}
for(i=0;i<h;i++) //鏋勫浘寤烘ā錛屾娊璞℃垚浜屽垎鍥懼尮閰嶇殑闂
for(j=0;j<w;j++)
{ if(map[i][j] && !used[map[i][j]])
{ arr[0][map[i][j]]=1;
used[map[i][j]]=1;
for(k=0;k<4;k++)
{ x=i+dx[k];
y=j+dy[k];
if(x>=0 && x<h && y>=0 && y<w && map[x][y])
{arr[map[i][j]][map[x][y]]=1;
arr[map[x][y]][1]=1;
used[map[x][y]]=1;
}
}
}
}
while(!flag)
{ memset(used,0,sizeof(used));
memset(pre,-1,sizeof(pre));
if(path(0))
ford_fulkerson();
else
flag=1;
}
printf("%d\n",node-2-res);
}
return 0;
}
]]>
//寰堝浜烘妸瀹冨仛鎴愪簩鍒嗗浘鍖歸厤
//浣嗚矊浼肩敤鏈澶ф祦涔熻兘姹傚嚭鏉?br>#include<iostream>
#include<string>
#include<map>
using namespace std;
int nr,np,na,flag,res,node;
int arr[402][402];
int q[1000],pre[1000],used[402];
map <string,int> PR;
int path(int s)
{ int u,head,tail,temp,i,j;
head=tail=0;
q[tail++]=s;
used[s]=1;
while(head<tail)
{ temp=tail;
for(i=head;i<temp;i++)
{ u=q[i];
if(u==1)
return 1;
for(j=0;j<node;j++)
if(used[j]==0 && arr[u][j]>0)
{pre[j]=u;
used[j]=1;
q[tail++]=j;
}
}
head=temp;
}
return 0;
}
void ford_fulkerson()
{ int i,j,u,v,min,x,y;
min=INT_MAX;
u=pre[1];
v=1;
while(u>=0)
{if(arr[u][v]<min)
min=arr[u][v];
v=u;
u=pre[u];
}
u=pre[1];
v=1;
while(u>=0)
{ arr[u][v]=arr[u][v]-min;
arr[v][u]=arr[v][u]+min;
v=u;
u=pre[u];
}
res=res+min;
}
int main()
{int u,v,w,i,j;
char str1[25],str2[25];
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
scanf("%d",&nr);
flag=0;
res=0;
node=2;
for(i=0;i<nr;i++)
{ scanf("%s",str1);
if(!PR[str1])
PR[str1]=node++;
arr[0][PR[str1]]++;
}
scanf("%d",&np);
for(i=0;i<np;i++)
{ scanf("%s%s",str1,str2);
if(!PR[str2])
PR[str2]=node++;
arr[PR[str2]][1]++;
}
scanf("%d",&na);
for(i=0;i<na;i++)
{ scanf("%s%s",str1,str2);
if(!PR[str1])
PR[str1]=node++;
if(!PR[str2])
PR[str2]=node++;
arr[PR[str2]][PR[str1]]=INT_MAX;
}
while(!flag)
{ memset(used,0,sizeof(used));
memset(pre,-1,sizeof(pre));
if(path(0))
ford_fulkerson();
else
flag=1;
}
printf("%d\n",np-res);
return 0;
}
int path(int s)
{ int u,head,tail,temp,i,j;
head=tail=0;
q[tail++]=s;
used[s]=1;
while(head<tail)
{ temp=tail;
for(i=head;i<temp;i++)
{ u=q[i];
if(u==n+1)
return 1;
for(j=0;j<=n+1;j++)
if(!used[j] && arr[u][j]>0)
{pre[j]=u;
used[j]=1;
q[tail++]=j;
}
}
head=temp;
}
return 0;
}
void ford_fulkerson()
{ int i,j,u,v,min;
min=INT_MAX;
u=pre[n+1];
v=n+1;
while(u>=0)
{if(arr[u][v]<min)
min=arr[u][v];
v=u;
u=pre[u];
}
u=pre[n+1];
v=n+1;
while(u>=0)
{ arr[u][v]=arr[u][v]-min;
arr[v][u]=arr[v][u]+min;
v=u;
u=pre[u];
}
res=res+min;
}
int main()
{int u,v,w,i,j;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
while((scanf("%d%d%d%d",&n,&np,&nc,&m))!=EOF)
{ flag=0;
res=0;
memset(arr,0,sizeof(arr));
for(i=0;i<m;i++)
{ while(getchar()!='(');
scanf("%d,%d)%d",&u,&v,&w);
arr[u][v]=w;
}
for(i=0;i<np;i++)
{ while(getchar()!='(');
scanf("%d)%d",&v,&w);
arr[n][v]=w;
}
for(i=0;i<nc;i++)
{ while(getchar()!='(');
scanf("%d)%d",&u,&w);
arr[u][n+1]=w;
}
while(!flag)
{ memset(used,0,sizeof(used));
memset(pre,-1,sizeof(pre));
if(path(n))
ford_fulkerson();
else
flag=1;
}
printf("%d\n",res);
}
return 0;
}
int main()
{int Case ,u,v,t;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
scanf("%d",&Case);
while(Case--)
{ scanf("%d%d%d",&n,&m,&w);
en=0;
for(int i=1;i<=m;i++)
{ scanf("%d%d%d",&u,&v,&t);
e[en].u=u;
e[en].v=v;
e[en++].t=t;
e[en].u=v;
e[en].v=u;
e[en++].t=t;
}
for(int i=1;i<=w;i++)
{ scanf("%d%d%d",&u,&v,&t);
e[en].u=u;
e[en].v=v;
e[en++].t=-t;
}
if(bellmanford())
puts("YES");
else
puts("NO");
}
return 0;
}
|
Bellman-Ford 綆楁硶鍙婂叾浼樺寲
Bellman-Ford綆楁硶涓庡彟涓涓潪甯歌憲鍚嶇殑Dijkstra綆楁硶涓鏍鳳紝鐢ㄤ簬姹傝В鍗曟簮鐐規渶鐭礬寰勯棶棰樸?/span>Bellman-ford綆楁硶闄や簡鍙眰瑙h竟鏉冨潎闈炶礋鐨勯棶棰樺錛岃繕鍙互瑙e喅瀛樺湪璐熸潈杈圭殑闂錛堟剰涔夋槸浠涔堬紝濂藉ソ鎬濊冿級錛岃?/span>Dijkstra綆楁硶鍙兘澶勭悊杈規潈闈炶礋鐨勯棶棰橈紝鍥犳 Bellman-Ford綆楁硶鐨勯傜敤闈㈣騫挎硾涓浜涖備絾鏄紝鍘熷鐨?/span>Bellman-Ford綆楁硶鏃墮棿澶嶆潅搴︿負 O錛?/span>VE錛?/span>,姣?/span>Dijkstra綆楁硶鐨勬椂闂村鏉傚害楂橈紝鎵浠ュ父甯歌浼楀鐨勫ぇ瀛︾畻娉曟暀縐戜功鎵蹇界暐錛屽氨榪炵粡鍏哥殑銆婄畻娉曞璁恒嬩篃鍙粙緇嶄簡鍩烘湰鐨?/span>Bellman-Ford綆楁硶錛屽湪鍥藉唴甯歌鐨勫熀鏈俊鎭濂ヨ禌鏁欐潗涓篃鍧囨湭鎻愬強錛屽洜姝よ綆楁硶鐨勭煡鍚嶅害涓庤鎺屾彙搴﹂兘涓嶅Dijkstra綆楁硶銆備簨瀹炰笂錛屾湁澶氱褰㈠紡鐨?/span>Bellman-Ford綆楁硶鐨勪紭鍖栧疄鐜般傝繖浜涗紭鍖栧疄鐜板湪鏃墮棿鏁堢巼涓婂緱鍒扮浉褰撴彁鍗囷紝渚嬪榪戜竴涓ゅ勾琚儹鎹х殑SPFA錛?/span>Shortest-Path Faster Algoithm 鏇村揩鐨勬渶鐭礬寰勭畻娉曪級綆楁硶鐨勬椂闂存晥鐜囩敋鑷崇敱浜?/span>Dijkstra綆楁硶錛屽洜姝ゆ垚涓轟俊鎭濂ヨ禌閫夋墜緇忓父璁ㄨ鐨勮瘽棰樸傜劧鑰岋紝闄愪簬璧勬枡鍖箯錛屾湁鍏?/span>Bellman-Ford綆楁硶鐨勮澶氶棶棰樺父甯稿洶鎵板ゥ璧涢夋墜銆傚錛氳綆楁硶鍊煎緱鎺屾彙涔堬紵鎬庢牱鐢ㄧ紪紼嬭璦鍏蜂綋瀹炵幇錛熸湁鍝簺浼樺寲錛熶笌SPFA綆楁硶鏈夊叧緋諱箞錛熸湰鏂囪瘯鍥懼Bellman-Ford綆楁硶鍋氫竴涓瘮杈冨叏闈㈢殑浠嬬粛銆傜粰鍑哄嚑縐嶅疄鐜扮▼搴忥紝浠庣悊璁哄拰瀹炴祴涓ゆ柟闈㈠垎鏋愪粬浠殑鏃墮棿澶嶆潅搴︼紝渚涘ぇ瀹跺湪澶囨垬鐪侀夊拰鍚庣畫鐨?/span>noi鏃跺弬鑰冦?/span>
Bellman-Ford綆楁硶鎬濇兂Bellman-Ford綆楁硶鑳藉湪鏇存櫘閬嶇殑鎯呭喌涓嬶紙瀛樺湪璐熸潈杈癸級瑙e喅鍗曟簮鐐規渶鐭礬寰勯棶棰樸傚浜庣粰瀹氱殑甯︽潈錛堟湁鍚戞垨鏃犲悜錛夊浘 G=錛?/span>V,E錛夛紝鍏舵簮鐐逛負s錛屽姞鏉冨嚱鏁?/span> w鏄?/span> 杈歸泦 E 鐨勬槧灝勩傚鍥?/span>G榪愯Bellman-Ford綆楁硶鐨勭粨鏋滄槸涓涓竷灝斿鹼紝琛ㄦ槑鍥句腑鏄惁瀛樺湪鐫涓涓粠婧愮偣s鍙揪鐨勮礋鏉冨洖璺?/span>鑻ヤ笉瀛樺湪榪欐牱鐨勫洖璺紝綆楁硶灝嗙粰鍑轟粠婧愮偣s鍒?/span> 鍥?/span>G鐨勪換鎰忛《鐐?/span>v鐨勬渶鐭礬寰?/span>d[v]銆?/span> Bellman-Ford綆楁硶嫻佺▼鍒嗕負涓変釜闃舵錛?/span>錛?錛?span style="FONT: 7pt Times New Roman"> 鍒濆鍖栵細灝嗛櫎婧愮偣澶栫殑鎵鏈夐《鐐圭殑鏈鐭窛紱諱及璁″?/span> d[v] ←+∞, d[s] ←0; 錛?錛?span style="FONT: 7pt Times New Roman"> 榪唬姹傝В錛氬弽澶嶅杈歸泦E涓殑姣忔潯杈硅繘琛屾澗寮涙搷浣滐紝浣垮緱欏剁偣闆哣涓殑姣忎釜欏剁偣v鐨勬渶鐭窛紱諱及璁″奸愭閫艱繎鍏舵渶鐭窛紱伙紱錛堣繍琛寍v|-1嬈★級 錛?錛?span style="FONT: 7pt Times New Roman"> 媯楠岃礋鏉冨洖璺細鍒ゆ柇杈歸泦E涓殑姣忎竴鏉¤竟鐨勪袱涓鐐規槸鍚︽敹鏁涖傚鏋滃瓨鍦ㄦ湭鏀舵暃鐨勯《鐐癸紝鍒欑畻娉曡繑鍥?/span>false錛岃〃鏄庨棶棰樻棤瑙o紱鍚﹀垯綆楁硶榪斿洖true錛屽茍涓斾粠婧愮偣鍙揪鐨勯《鐐?/span>v鐨勬渶鐭窛紱諱繚瀛樺湪 d[v]涓?/span>
綆楁硶鎻忚堪濡備笅錛?/span> Bellman-Ford(G,w,s) 錛?/span>boolean //鍥?/span>G 錛岃竟闆?/span> 鍑芥暟 w 錛?/span>s涓烘簮鐐?/span> 1 for each vertex v ∈ V錛圙錛?do //鍒濆鍖?span style="mso-spacerun: yes"> 1闃舵 2 d[v] ←+∞ 3 d[s] ←0; //1闃舵緇撴潫 4 for i=1 to |v|-1 do //2闃舵寮濮嬶紝鍙岄噸寰幆銆?/span> 5 for each edge錛坲,v錛?∈E(G) do //杈歸泦鏁扮粍瑕佺敤鍒幫紝絀蜂婦姣忔潯杈廣?/span> 6 If d[v]> d[u]+ w(u,v) then //鏉懼紱鍒ゆ柇 7 d[v]=d[u]+w(u,v) //鏉懼紱鎿嶄綔 2闃舵緇撴潫 8 for each edge錛坲,v錛?∈E(G) do 9 If d[v]> d[u]+ w(u,v) then 10 Exit false 11 Exit true
涓嬮潰緇欏嚭鎻忚堪鎬ц瘉鏄庯細 棣栧厛鎸囧嚭錛屽浘鐨勪換鎰忎竴鏉℃渶鐭礬寰勬棦涓嶈兘鍖呭惈璐熸潈鍥炶礬錛屼篃涓嶄細鍖呭惈姝f潈鍥炶礬錛屽洜姝ゅ畠鏈澶氬寘鍚?/span>|v|-1鏉¤竟銆?/span> 鍏舵錛屼粠婧愮偣s鍙揪鐨勬墍鏈夐《鐐瑰鏋?/span> 瀛樺湪鏈鐭礬寰勶紝鍒欒繖浜涙渶鐭礬寰勬瀯鎴愪竴涓互s涓烘牴鐨勬渶鐭礬寰勬爲銆?/span>Bellman-Ford綆楁硶鐨勮凱浠f澗寮涙搷浣滐紝瀹為檯涓婂氨鏄寜欏剁偣璺濈s鐨勫眰嬈★紝閫愬眰鐢熸垚榪欐5鏈鐭礬寰勬爲鐨勮繃紼嬨?/span> 鍦ㄥ姣忔潯杈硅繘琛?span>1閬嶆澗寮涚殑鏃跺欙紝鐢熸垚浜嗕粠s鍑哄彂錛屽眰嬈¤嚦澶氫負1鐨勯偅浜涙爲鏋濄備篃灝辨槸璇達紝鎵懼埌浜嗕笌s鑷沖鏈?鏉¤竟鐩歌仈鐨勯偅浜涢《鐐圭殑鏈鐭礬寰勶紱瀵規瘡鏉¤竟榪涜絎?閬嶆澗寮涚殑鏃跺欙紝鐢熸垚浜嗙2灞傛鐨勬爲鏋濓紝灝辨槸璇存壘鍒頒簡緇忚繃2鏉¤竟鐩歌繛鐨勯偅浜涢《鐐圭殑鏈鐭礬寰?#8230;…銆傚洜涓烘渶鐭礬寰勬渶澶氬彧鍖呭惈|v|-1 鏉¤竟錛屾墍浠ワ紝鍙渶瑕佸驚鐜瘄v|-1 嬈°?/span> 姣忓疄鏂戒竴嬈℃澗寮涙搷浣滐紝鏈鐭礬寰勬爲涓婂氨浼氭湁涓灞傞《鐐硅揪鍒板叾鏈鐭窛紱伙紝姝ゅ悗榪欏眰欏剁偣鐨勬渶鐭窛紱誨煎氨浼氫竴鐩翠繚鎸佷笉鍙橈紝涓嶅啀鍙楀悗緇澗寮涙搷浣滅殑褰卞搷銆傦紙浣嗘槸錛屾瘡嬈¤繕瑕佸垽鏂澗寮涳紝榪欓噷嫻垂浜嗗ぇ閲忕殑鏃墮棿錛屾庝箞浼樺寲錛熷崟綰殑浼樺寲鏄惁鍙錛燂級 濡傛灉娌℃湁璐熸潈鍥炶礬錛岀敱浜庢渶鐭礬寰勬爲鐨勯珮搴︽渶澶氬彧鑳芥槸|v|-1錛屾墍浠ユ渶澶氱粡榪噟v|-1閬嶆澗寮涙搷浣滃悗錛屾墍鏈変粠s鍙揪鐨勯《鐐瑰繀灝嗘眰鍑烘渶鐭窛紱匯傚鏋?d[v]浠嶄繚鎸?+∞錛屽垯琛ㄦ槑浠巗鍒皏涓嶅彲杈俱?/span> 濡傛灉鏈夎礋鏉冨洖璺紝閭d箞絎?span> |v|-1 閬嶆澗寮涙搷浣滀粛鐒朵細鎴愬姛錛岃繖鏃訛紝璐熸潈鍥炶礬涓婄殑欏剁偣涓嶄細鏀舵暃銆?/span>
渚嬪瀵逛簬涓婂浘錛岃竟涓婃柟妗嗕腑鐨勬暟瀛椾唬琛ㄦ潈鍊鹼紝欏剁偣A,B,C涔嬮棿瀛樺湪璐熸潈鍥炶礬銆係鏄簮鐐癸紝欏剁偣涓暟瀛楄〃紺鴻繍琛孊ellman-Ford綆楁硶鍚庡悇鐐圭殑鏈鐭窛紱諱及璁″箋?/span> 姝ゆ椂d[a]鐨勫間負1錛屽ぇ浜巇[c]+w(c,a)鐨勫?2錛岀敱姝[a]鍙互鏉懼紱涓?2錛岀劧鍚巇[b]鍙堝彲浠ユ澗寮涗負-5,d[c]鍙堝彲浠ユ澗寮涗負-7.涓嬩竴涓懆鏈燂紝d[a]鍙堝彲浠ユ洿鏂頒負鏇村皬鐨勫鹼紝榪欎釜榪囩▼姘歌繙涓嶄細緇堟銆傚洜姝わ紝鍦ㄨ凱浠f眰瑙f渶鐭礬寰勯樁孌電粨鏉熷悗錛屽彲浠ラ氳繃媯楠岃竟闆咵鐨勬瘡鏉¤竟(u,v)鏄惁婊¤凍鍏崇郴寮?span style="mso-spacerun: yes"> d[v]> d[u]+ w(u,v) 鏉ュ垽鏂槸鍚﹀瓨鍦ㄨ礋鏉冨洖璺?br> 浜屻佸熀鏈?/span> Bellman-Ford 綆楁硶鐨?/span> pascal瀹炵幇銆?/span>瑙?/span> bellmanford.pas 鏂囦歡銆?/span> 涓夈佸熀鏈畻娉曚箣涓婄殑浼樺寲銆?/span>鍒嗘瀽 Bellman-Ford綆楁硶錛屼笉闅劇湅鍑猴紝澶栧眰寰幆錛堣凱浠f鏁幫級|v|-1瀹為檯涓婂彇寰楁槸涓婇檺銆傜敱涓婇潰瀵圭畻娉曟紜х殑璇佹槑鍙煡錛岄渶瑕佺殑榪唬閬嶆暟絳変簬鏈鐭礬寰勬爲鐨勯珮搴︺傚鏋滀笉瀛樺湪璐熸潈鍥炶礬錛屽鉤鍧囨儏鍐典笅鐨勬渶鐭礬寰勬爲鐨勯珮搴﹀簲璇ヨ繙榪滃皬浜?/span> |v|-1錛屽湪姝ゆ儏鍐典笅錛屽浣欐渶鐭礬寰勬爲楂樼殑榪唬閬嶆暟灝辨槸鏃墮棿涓婄殑嫻垂錛岀敱姝わ紝鍙互渚濇鏉ュ疄鏂戒紭鍖栥?/span> 浠庣粏鑺備笂鍒嗘瀽錛屽鏋滃湪鏌愪竴閬嶈凱浠d腑錛岀畻娉曟弿榪頒腑絎?/span>7琛岀殑鏉懼紱鎿嶄綔鏈墽琛岋紝璇存槑璇ラ亶榪唬鎵鏈夌殑杈歸兘娌℃湁琚澗寮涖傚彲浠ヨ瘉鏄庯紙鎬庝箞璇佹槑錛燂級錛氳嚦姝ゅ悗錛岃竟闆嗕腑鎵鏈夌殑杈歸兘涓嶉渶瑕佸啀琚澗寮涳紝浠庤屽彲浠ユ彁鍓嶇粨鏉熻凱浠h繃紼嬨傝繖鏍鳳紝浼樺寲鐨勬帾鏂藉氨闈炲父綆鍗曚簡銆?/span> 璁懼畾涓涓竷灝斿瀷鏍囧織鍙橀噺 relaxed錛屽垵鍊間負false銆傚湪鍐呭眰寰幆涓紝浠呭綋鏈夎竟琚垚鍔熸澗寮涙椂錛屽皢 relaxed 璁劇疆涓?/span>true銆傚鏋滄病鏈夎竟琚澗寮涳紝鍒欐彁鍓嶇粨鏉熷灞傚驚鐜傝繖涓鏀硅繘鍙互鏋佸ぇ鐨勫噺灝戝灞傚驚鐜殑榪唬嬈℃暟銆備紭鍖栧悗鐨?/span> bellman-ford鍑芥暟濡備笅銆?/span> function bellmanford(s:longint):boolean; begin for i:=1 to nv do d[i]:=max; d[s]:=0; for i:=1 to nv-1 do begin relaxed:=false; for j:=1 TO ne do if(d[edges[j].s]<>max) and (d[edges[j].e]>d[edges[j].s]+edges[j].w) then begin d[edges[j].e]:=d[edges[j].s]+edges[j].w ; relaxed:=true; end; if not relaxed then break; end; for i:=1 to ne do if d[edges[j].e]>d[edges[j].s]+edges[j].w then exit(false); exit(true); end; 榪欐牱鐪嬩技騫沖嚒鐨勪紭鍖栵紝浼氭湁鎬庢牱鐨勬晥鏋滃憿錛熸湁鐮旂┒琛ㄦ槑錛屽浜庨殢鏈虹敓鎴愭暟鎹殑騫沖潎鎯呭喌錛屾椂闂村鏉傚害鐨勪及綆楀叕寮忎負 1.13|E| if |E|<|V| 0.95*|E|*lg|V| if |E|>|V| 浼樺寲鍚庣殑綆楁硶鍦ㄥ鐞嗘湁璐熸潈鍥炶礬鐨勬祴璇曟暟鎹椂錛岀敱浜庢瘡嬈¢兘浼氭湁杈硅鏉懼紱錛屾墍浠?/span>relaxed姣忔閮戒細琚疆涓?/span>true錛屽洜鑰屼笉鍙兘鎻愬墠緇堟澶栧眰寰幆銆傝繖瀵瑰簲浜嗘渶鍧忔儏鍐碉紝鍏舵椂闂村鏉傚害浠嶆棫涓?/span>O(VE)銆?/span> 浼樺寲鍚庣殑綆楁硶鐨勬椂闂村鏉傚害宸茬粡鍜岀敤浜屽弶鍫嗕紭鍖栫殑Dijkstra綆楁硶鐩歌繎浜嗭紝鑰岀紪鐮佺殑澶嶆潅紼嬪害榪滄瘮鍚庤呬綆銆傚姞涔?/span>Bellman-Ford綆楁硶鑳藉鐞嗗悇縐嶈竟鍊兼潈鎯呭喌涓嬬殑鏈鐭礬寰勯棶棰橈紝鍥犺岃繕鏄潪甯鎬紭縐鐨勩?/span>Usaco3.2.6 鐨勭▼搴忚bellmanford_1.pas 鍥涖?/span>SPFA 綆楁硶 SPFA鏄洰鍓嶇浉褰撲紭縐鐨勬眰鏈鐭礬寰勭殑綆楁硶錛屽煎緱鎴戜滑鎺屾彙銆?/span> SPFA瀵?/span>Bellman-Ford綆楁硶浼樺寲鐨勫叧閿箣澶勫湪浜庢剰璇嗗埌錛?span style="COLOR: #ff6600">鍙湁閭d簺鍦ㄥ墠涓閬嶆澗寮涗腑鏀瑰彉浜嗚窛紱諱及璁″肩殑鐐癸紝鎵嶅彲鑳藉紩璧蜂粬浠殑閭繪帴鐐圭殑璺濈浼拌鍊肩殑鏀瑰彉銆?/span>鍥犳錛岀敤涓涓厛榪涘厛鍑虹殑闃熷垪鏉ュ瓨鏀捐鎴愬姛鏉懼紱鐨勯《鐐廣傚垵濮嬫椂錛屾簮鐐?/span>s鍏ラ槦銆傚綋闃熷垪涓嶄負絀烘椂錛屽彇鍑哄棣栭《鐐癸紝瀵瑰畠鐨勯偦鎺ョ偣榪涜鏉懼紱銆傚鏋滄煇涓偦鎺ョ偣鏉懼紱鎴愬姛錛屼笖璇ラ偦鎺ョ偣涓嶅湪闃熷垪涓紝鍒欏皢鍏跺叆闃熴傜粡榪囨湁闄愭鐨勬澗寮涙搷浣滃悗錛岄槦鍒楀皢涓虹┖錛岀畻娉曠粨鏉熴?/span>SPFA綆楁硶鐨勫疄鐜幫紝闇瑕佺敤鍒頒竴涓厛榪涘厛鍑虹殑闃熷垪 queue 鍜屼竴涓寚紺洪《鐐規槸鍚﹀湪闃熷垪涓殑 鏍囪鏁扮粍 mark銆備負浜嗘柟渚挎煡鎵炬煇涓《鐐圭殑閭繪帴鐐癸紝鍥鵑噰鐢ㄤ復鐣岃〃瀛樺偍銆?/span> 紼嬪簭瀛樺偍鍦?/span> spfa.pas涓備互usaco 3.2.6 璇曢2涓轟緥銆傜敤閭繪帴琛ㄥ啓鐨勭▼搴忋?/span> 闇瑕佹敞鎰忕殑鏄細浠呭綋鍥句笉瀛樺湪璐熸潈鍥炶礬鏃訛紝SPFA鑳芥甯稿伐浣溿傚鏋滃浘瀛樺湪璐熸潈鍥炶礬錛岀敱浜庤礋鏉冨洖璺笂鐨勯《鐐規棤娉曟敹鏁涳紝鎬繪湁欏剁偣鍦ㄥ叆闃熷拰鍑洪槦寰榪旓紝闃熷垪鏃犳硶涓虹┖錛岃繖縐嶆儏鍐典笅SPFA鏃犳硶姝e父緇撴潫銆?/span> 鍒ゆ柇璐熸潈鍥炶礬鐨?/span>鏂規寰堝錛屼笘闂存祦浼犳渶騫跨殑鏄褰曟瘡涓粨鐐硅繘闃熸鏁幫紝瓚呰繃|V|嬈¤〃紺烘湁璐熸潈 鍏充簬SPFA鐨勬椂闂村鏉傚害錛屼笉濂藉噯紜及璁★紝涓鑸涓烘槸 O錛?/span>kE錛夛紝k鏄父鏁?/span> 浜斻佹椂闂存晥鐜囧疄嫻?/span>涓婅堪浠嬬粛鐨?/span>Bellman-Ford綆楁硶鍙婁袱縐嶇殑浼樺寲錛屽彧鏄湪鐞嗚涓婂垎鏋愪簡鏃墮棿澶嶆潅搴︼紝鐢ㄥ疄闄呯殑鏁版嵁嫻嬭瘯錛屼細鏈変粈涔堢粨鏋滃憿錛熶負姝わ紝鎴戜滑閫夋嫨 usaco 3.2.6銆?/span> Spfa鐨勬椂闂存晥鐜囪繕鏄緢楂樼殑銆傚茍涓?/span>spfa鐨勭紪紼嬪鏉傚害瑕佹瘮Dijksta+heap浼樺寲瑕佸ソ鐨勫銆?/span> 鍏佺粨璁?/span>緇忚繃浼樺寲Bellman-Ford綆楁硶鏄潪甯鎬紭鍖栫殑姹傚崟婧愭渶鐭礬寰勭殑綆楁硶錛?/span>SPFA鏃墮棿鏁堢巼瑕佷紭浜庣涓縐嶄紭鍖栧艦寮忥紝浣嗙涓縐嶄紭鍖栧艦寮忕殑緙栫爜澶嶆潅搴︿綆浜?/span>SPFA銆備袱縐嶄紭鍖栧艦寮忕殑緙栫▼澶嶆潅搴﹂兘浣庝簬Dijkstra綆楁硶銆傚鏋滃湪鍒ゆ柇鏄惁瀛樺湪璐熸潈鍥炶礬錛屾帹鑽愪嬌鐢ㄧ涓縐嶄紭鍖栧艦寮忥紝鍚﹀垯鎺ㄨ崘浣跨敤SPFA銆?/span> |