戰爭 I(最短路 離線演算法)

2021-10-06 16:46:53 字數 2585 閱讀 4511

題目描述

某年,白國和委國之間的戰爭爆發了!

然而,在委國指揮官委兆的眼裡,白國人不堪一擊。現在他手上有一張白國的地圖,發現白國有 n 個據點,m 條無向道路,他們有各自的長度。於是他決定按一定順序破壞白國的一些據點,使得所有連線這些據點與其他據點的道路無法通行。同時,為了更有效率的攻城略地,也為了滿足委兆的成就感,他有時還想知道當前某兩個據點間的最短路徑長。請程式設計滿足他的要求。

輸入

第一行兩個正整數 n,m。

接下來 m 行,每行有三個數 a,b,v表示一條連線 a,b的無向邊。

接下來一行乙個正整數 q 。

接下來 q 行,每行是兩個數 「 1 a 」 或是三個數 「 2 a b 」 ,含義如題面所述。

輸出

對於每個「 2 a b 」 操作,輸出對應的結果。

若兩點不連通,輸出−1 。

樣例輸入

4 41 2 6

3 4 1

1 3 4

1 4 9

32 1 4

1 32 1 4

樣例輸出59

提示

對於 100%的資料 n≤200,m≤n∗(n−1)/2,q≤2×104,v≤1000保證所有的操作合法。

思路

將所有問題離線運算,在記錄問題時,先鎖定被標記的點,對每個問題,從最後計算到最前,並倒序解鎖標記點,每次解鎖對全圖進行更新

**實現

#pragma gcc optimize(3,"ofast","inline")

#include

using

namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

int n=

205;

const

int m=

50005

;const

int inf=

0x3f3f3f3f

;const ll linf=

0x3f3f3f3f3f3f3f3f

;const ull sed=31;

const ll mod=

10000019

;const

double eps=

1e-5

;const

double pi=

acos(-

1.0)

;typedef pair<

int,

int>p;

typedef pair<

double

,double

>pd;

template

<

class

t>

void

read

(t &x)

while

(ch>=

'0'&&ch<=

'9')

x=f?

-x:x;

return;}

ll mp[n]

[n];

int n,m,q;

p qus[m]

;bool vis[n]

;vectorans;

intmain()

read

(q);

for(

int i=

1;i<=q;i++

)else

}for

(int k=

1;k<=n;k++

)for

(int i=

1;i<=n;i++

)for

(int j=

1;j<=n;j++)if

(!vis[i]

&&!vis[j]

&&!vis[k]

) mp[i]

[j]=

min(mp[i]

[j],mp[i]

[k]+mp[k]

[j])

;for

(int len=q;len;len--

)else

for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=n;j++)if

(!vis[i]

&&!vis[j]

) mp[i]

[j]=

min(mp[i]

[j],mp[i]

[u]+mp[u]

[j]);}

}for

(int i=ans.

size()

-1;i>=

0;i--

)return0;

}

Dijkstra求最短路 I(樸素演算法)

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 輸出乙個整數,表示1號點到n號...

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

最短路演算法

常用的最短路演算法有三種 disjkstra,floyd,ballman floyd 一 disjkstra演算法 dijkstra演算法要求圖上的權非負數。同樣使用於無向圖 html view plain copy include stdio.h hdu 2544 define maxsum 0x...