最短路 旅程

2022-07-16 16:30:20 字數 1471 閱讀 4594

題目描述

您曾經帶領著我,穿過我的白天的擁擠不堪的旅程,而到達了我的黃昏的孤寂之境。在通宵的寂靜裡,我等待著它的意義。

神即將帶領一些人去他們的孤寂之境,由於這個世界的不穩定,地點之間的有向道路會不定期地毀壞,出於工作準備,神想知道在某些道路毀壞之後某兩點之間的最短路。

就是給定乙個有向圖,現有兩個操作,操作 1 是刪除一條邊(一條邊可重複刪除),操作 2是詢問兩個點之間的最短路。

輸入第1行兩個正整數n,m,分別表示圖的點數和運算元。

第2行至第n+1行每行n個正整數,為圖的鄰接矩陣,第i行第j列的數表示點i和點j間距離,保證對角線為0。

接下來m行每行三個正整數c,x,y,c表示操作種類,為1或2,當c=1時表示刪除x與y相連的邊,當c=2時表示詢問x到y的最短路,若不可達則輸出−1。

輸出輸出若干行,每個2操作對應一行,答案為詢問中x到y的最短路或−1

複製樣例資料

5 6

0 6 6 10 10

2 0 7 8 6

10 5 0 10 3

9 5 8 0 7

4 9 8 3 0

1 2 3

1 4 1

2 1 3

1 4 2

1 1 2

2 4 1

樣例輸出
6

11

樣例輸出
6

11

1 #include 2 #include 3

using

namespace

std;

4const

int inf = 123456789;5

const

int maxn = 2e5+50

;6 typedef long

long

ll;7 ll edge[250][250];8

intn,m;

9ll fr[maxn],to[maxn],op[maxn],ans[maxn],len[maxn];

10 mapint,int>,int >mp;

11void

floyd()

1221}22

}23}24

intmain()

2533}34

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

3543}44

floyd();

45int tot=0;46

for(register int k=m;k>=1;k--)

4759}60

}61}62

else

6366}67

for(register int i=tot;i>=1;i--)

6874

//cout << "hello world!" << endl;

75return0;

76 }

view code

10 12模擬賽 旅程 最短路

神即將帶領一些人去他們的孤寂之境,由於這個世界的不穩定,地點之間的有向道路會不定期地毀壞,出於工作準備,神想知道在某些道路毀壞之後某兩點之間的最短路。就是給定乙個有向圖,現有兩個操作,操作 1 是刪除一條邊 一條邊可重複刪除 操作 2是詢問兩個點之間的最短路。第 1 行兩個正整數 n,m,分別表示圖...

最短的旅程

在byteland有n個城市 編號從1到n 它們之間通過雙向的道路相連。byteland的國王並不大方,所以,那裡只有n 1條道路,但是,它們的連線方式使得從任意城市都可以走到其他的任何城市。一天,starhder到了編號為k的城市。他計畫從城市k開始,遊遍城市m1,m2,m3,mj 不一定要按這個...

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...