日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解题报告 聚会

發(fā)布時間:2025/4/16 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解题报告 聚会 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.????????題目

聚會?(FTT

【問題描述】

S想要從某地出發(fā)去同學(xué)k的家中參加一個party,但要有去有回。他想讓所用的時間盡量的短。但他又想知道從不同的點出發(fā),來回的最短時間中最長的時間是多少,

這個任務(wù)就交給了你。

【輸入格式】

第一行三個正整數(shù)n,m,k(n是節(jié)點個數(shù),m是有向邊的條數(shù),k是參加聚會的地點編號)(?1?≤?N?≤?1000?,1?≤?M?≤?100,000)

第二行..m+1行每行3個整數(shù)x,y,w?代表從x到y(tǒng)需要花w的時間(1?≤?w≤?100)

【輸出格式】

???輸出從不同的節(jié)點出發(fā)的最短時間中最長的時間。

【樣例輸入】party.in

4?8?2

1?2?4

1?3?2

1?4?7

2?1?1

2?3?5

3?1?2

3?4?4

4?2?3

【樣例輸出】party.out

10

?

2.????????題目實質(zhì)

其實這個東西就是一個最短路的模型。

3.????????算法

我說是網(wǎng)絡(luò)流......你信不?

廢話,當(dāng)然是最短路!

每個點到K節(jié)點的最短路?+?K到對應(yīng)的點的最短路

以除K以外的點到K的最短路反復(fù)的求就有了很多的冗余,會超時

可以思考從其他的點到K點的最短路等價于從K點出發(fā)使用反向邊求到各個點的最短路

這樣這道題就完美的解決了?ans=max{dis1[i][k]+dis2[i][k]}

4.????????注意事項

注意,這個題是非常典型的需要正著求一遍,反著求一遍的最短路。

5.????????代碼

水水最短路?Leve

var

?n,m,k,i,j,ans:longint;

?x,y,len:longint;

?d:array[1..1000]?of?longint;

?sum:array[1..1000]?of?longint;

?map,mapp:array[1..1000,0..1000]?of?longint;

?ll,lll:array[1..1000,1..1000]?of?longint;

?q:array[1..1000000]?of?longint;

?v:array[1..1000]?of?boolean;

procedure?spfa(x:longint);

?var

??i,l,r,temp:longint;

?begin

??filldword(d,sizeof(d)>>2,maxlongint>>1);

??fillchar(v,sizeof(v),false);

??v[x]:=true;

??l:=0;?r:=1;

??d[x]:=0;

??q[1]:=x;

??while?l<r?do

???begin

????inc(l);

temp:=q[l];

v[temp]:=false;

for?i:=1?to?map[temp,0]?do

?if?d[map[temp,i]]>d[temp]+ll[temp,i]?then

??begin

???d[map[temp,i]]:=d[temp]+ll[temp,i];

???if?not?v[map[temp,i]]?then

????begin

?v[map[temp,i]]:=true;

?inc(r);

????q[r]:=map[temp,i];

end;

?end;

???end;

?end;

procedure?spfa2(x:longint);

?var

??i,l,r,temp:longint;

?begin

??filldword(d,sizeof(d)>>2,maxlongint>>1);

??fillchar(v,sizeof(v),false);

??v[x]:=true;

??l:=0;?r:=1;

??d[x]:=0;

??q[1]:=x;

??while?l<r?do

???begin

????inc(l);

temp:=q[l];

v[temp]:=false;

for?i:=1?to?mapp[temp,0]?do

?if?d[mapp[temp,i]]>d[temp]+lll[temp,i]?then

??begin

???d[mapp[temp,i]]:=d[temp]+lll[temp,i];

???if?not?v[mapp[temp,i]]?then

????begin

?v[mapp[temp,i]]:=true;

?inc(r);

????q[r]:=mapp[temp,i];

end;

?end;

???end;

?end;

begin

?assign(input,'party.in');

?assign(output,'party.out');

?reset(input);

?rewrite(output);

?readln(n,m,k);

?for?i:=1?to?m?do

??begin

???readln(x,y,len);

???inc(map[x,0]);

???map[x,map[x,0]]:=y;

???ll[x,map[x,0]]:=len;

???inc(mapp[y,0]);

???mapp[y,mapp[y,0]]:=x;

???lll[y,mapp[y,0]]:=len;

??end;

?spfa(k);

?for?i:=1?to?n?do

??sum[i]:=d[i];

?spfa2(k);

?for?i:=1?to?n?do

??if?i<>k?then

???if?d[i]<maxlongint>>1?then

????if?sum[i]<maxlongint>>1?then

?????if?d[i]+sum[i]>ans?then?ans:=d[i]+sum[i];

?writeln(ans);

?close(input);

?close(output);

end.

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/SueMiller/archive/2011/10/11/2207802.html

總結(jié)

以上是生活随笔為你收集整理的解题报告 聚会的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。