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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【2018.3.24】模拟赛之六-ssl2550 重要人物【图论,最短路,SPFA】

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【2018.3.24】模拟赛之六-ssl2550 重要人物【图论,最短路,SPFA】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正題


大意

有一個(gè)大人物,它要從經(jīng)過一些地方,他所在的路會(huì)被封閉(不可以進(jìn)入,可以出)。你要從一個(gè)點(diǎn)到到另一個(gè)點(diǎn),求最短時(shí)間。


解題思路

求出每條路的封閉時(shí)間,然后SPFA


代碼

#include<cstdio> #include<cstring> using namespace std; struct line{int x,y,w,next,en,st; }a[20001]; int p[1001],state[1001],f[1001],n,s,e,mn,m,t,g,ww,xx,yy,head,tail,ls[1001]; bool v[1001]; void spfa() {state[1]=s;v[s]=true;memset(f,127/3,sizeof(f));f[s]=t;head=0;tail=1;do{head=head%n+1;int q=ls[state[head]];while (q){if (f[a[q].x]+a[q].w<f[a[q].y] && (f[a[q].x]<a[q].st || f[a[q].x]>=a[q].en))//直接走{f[a[q].y]=f[a[q].x]+a[q].w;if (!v[a[q].y]){tail=tail%n+1;state[tail]=a[q].y;v[a[q].y]=true;}}else if (f[a[q].x]>=a[q].st && f[a[q].x]<a[q].en && a[q].en+a[q].w<f[a[q].y])//等道路開啟{f[a[q].y]=a[q].en+a[q].w;if (!v[a[q].y]){tail=tail%n+1;state[tail]=a[q].y;v[a[q].y]=true;}}q=a[q].next;}v[state[head]]=false;}while (head!=tail); } int main() {scanf("%d%d%d%d%d%d",&n,&mn,&s,&e,&t,&g);for (int i=1;i<=g;i++){scanf("%d",&p[i]);}for (int i=1;i<=mn;i++){scanf("%d%d%d",&xx,&yy,&ww);a[++m].x=xx;a[m].y=yy;a[m].next=ls[xx];a[m].w=ww;ls[xx]=m;a[++m].y=xx;a[m].x=yy;a[m].next=ls[yy];a[m].w=ww;ls[yy]=m;//插入一條邊}ww=0;for (int i=1;i<g;i++){int q=ls[p[i]];while (a[q].y!=p[i+1])q=a[q].next;a[q].st=ww;ww+=a[q].w;a[q].en=ww;q=ls[p[i+1]];while (a[q].y!=p[i])q=a[q].next;a[q].st=ww-a[q].w;a[q].en=ww;//求路什么時(shí)間被封閉}spfa();printf("%d",f[e]-t); }

總結(jié)

以上是生活随笔為你收集整理的【2018.3.24】模拟赛之六-ssl2550 重要人物【图论,最短路,SPFA】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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