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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【bzoj3575】 Hnoi2014—道路堵塞

發(fā)布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【bzoj3575】 Hnoi2014—道路堵塞 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://www.lydsy.com/JudgeOnline/problem.php?id=3575?(題目鏈接)

題意

  給出一個有向圖和一條最短路,問最短路上任意一條邊斷掉,此時的最短路是多少。

Solution

  聽說這道題正解被江哥插了。。。右轉(zhuǎn)題解→_→:lmy學(xué)長

  平衡樹用堆就可以了。

細節(jié)

  用棧來存要加入堆中的點,不然不好消除標(biāo)記。

代碼

// bzoj3575 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define LL long long #define inf (1ll<<60) #define Pi acos(-1.0) #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); using namespace std;const int maxn=200010; int head[maxn],dis[maxn],vis[maxn],st[maxn],in[maxn]; int n,m,L,cnt,id[maxn],ord[maxn],suf[maxn]; struct edge {int from,to,next,w;}e[maxn<<1]; struct data {int num,len;friend bool operator < (const data a,const data b) {return a.len>b.len;} }; priority_queue<data> T;inline void link(int u,int v,int w) {e[++cnt]=(edge){u,v,head[u],w};head[u]=cnt; } inline void SPFA(int u,int v,int k) {queue<int> q;q.push(u);int top=0;while (!q.empty()) {int x=q.front();q.pop();vis[x]=0;for (int i=head[x];i;i=e[i].next) if (i!=k) {if (ord[e[i].to]>ord[u]) {dis[e[i].to]=min(dis[e[i].to],dis[x]+e[i].w);if (!in[e[i].to]) in[e[i].to]=1,st[++top]=e[i].to;}else if (dis[e[i].to]>dis[x]+e[i].w) {dis[e[i].to]=dis[x]+e[i].w;if (!vis[e[i].to]) vis[e[i].to]=1,q.push(e[i].to);}}}for (int i=1;i<=top;i++) {T.push((data){ord[st[i]],suf[st[i]]+dis[st[i]]});in[st[i]]=0;} } int main() {scanf("%d%d%d",&n,&m,&L);for (int u,v,w,i=1;i<=m;i++) {scanf("%d%d%d",&u,&v,&w);link(u,v,w);}ord[1]=1;for (int i=1;i<=L;i++) scanf("%d",&id[i]),ord[e[id[i]].to]=i+1;for (int i=L;i>=1;i--) suf[e[id[i]].from]=suf[e[id[i]].to]+e[id[i]].w;memset(dis,0x7f,sizeof(dis));dis[1]=0;for (int i=1;i<=L;i++) {int u=e[id[i]].from,v=e[id[i]].to;SPFA(u,v,id[i]);while (!T.empty() && T.top().num<ord[v]) T.pop();printf("%d\n",T.empty() ? -1 : T.top().len);dis[v]=dis[u]+e[id[i]].w;}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/MashiroSky/p/6440116.html

總結(jié)

以上是生活随笔為你收集整理的【bzoj3575】 Hnoi2014—道路堵塞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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