bzoj3575 Hnoi2014 道路堵塞

2021-07-11 21:11:25 字數 1099 閱讀 3972

一開始看錯題啦!

某一條邊不走的最短路相當於1--沿最短路-->x-->……-->y--沿最短路-->n,於是

定義t,表示從起點到最短路上序號r有一條長度為l的非最短路。然後用堆維護即可。(慎用memset。。)tle。。。

#include#include#include#include#include#define n 100005

using namespace std;

int n,m,l,x,y,z,ord[n],l2[n],a[n];

int first[n],next[n<<1],frm[n<<1],to[n<<1],len[n<<1],l;

int q[n],val[n],st[n],h,dis[n];

bool fl[n],inq[n];

struct t;

bool operator<(t a,t b)

priority_queues;

void link(int x,int y,int z)

void spfa(int u,int v,int k)

else

if (dis[y]>dis[x]+len[i])

}} for (int t;h;h--) t=st[h],s.push((t)),fl[t]=0;

}int main()

{ scanf("%d%d%d",&n,&m,&l);

for (int i=1;i<=m;i++)

scanf("%d%d%d",&x,&y,&z),link(x,y,z);

ord[1]=1;

for (int i=1;i<=l;i++)

scanf("%d",&a[i]),ord[to[a[i]]]=i+1;

for (int i=l;i>=1;i--)

l2[frm[a[i]]]=l2[to[a[i]]]+len[a[i]];

memset(dis,0x3f,sizeof dis);dis[1]=0;

for (int i=1;i<=l;i++)

{ int u=frm[a[i]],v=to[a[i]];

for (spfa(u,v,a[i]);!s.empty()&&s.top().r

bzoj3575 Hnoi2014 道路堵塞

總趕腳第二題總是比第三題難。好吧,這題一點思路都沒有 聽說用民科可以過掉大部分資料。我們發現刪邊後的路徑一定是這樣的 起點 若干個原最短路徑上的邊 若干個非最短路徑上的邊 若干個原最短路徑上的邊 終點 我們發現其實就是不走原最短路徑上的乙個區間,並且刪除的邊一定在這個區間上 我們按順序列舉邊,然後從...

bzoj3575 Hnoi2014 道路堵塞

題目鏈結 給出乙個有向圖和一條最短路,問最短路上任意一條邊斷掉,此時的最短路是多少。聽說這道題正解被江哥插了。右轉題解 lmy學長 平衡樹用堆就可以了。用棧來存要加入堆中的點,不然不好消除標記。bzoj3575 include include include include include incl...

bzoj3575 最短路 SPFA 道路堵塞

description a國有n座城市,依次標為1到n。同時,在這n座城市間有m條單向道路,每條道路的長度是乙個正整數。現在,a國 交通部指定了一條從城市1到城市n的路徑,並且保證這條路徑的長度是所有從城市1到城市n的路徑中最短的。不幸 的是,因為從城市1到城市n旅行的人越來越多,這條由交通部指定的...