題目描述
您曾經帶領著我,穿過我的白天的擁擠不堪的旅程,而到達了我的黃昏的孤寂之境。在通宵的寂靜裡,我等待著它的意義。
神即將帶領一些人去他們的孤寂之境,由於這個世界的不穩定,地點之間的有向道路會不定期地毀壞,出於工作準備,神想知道在某些道路毀壞之後某兩點之間的最短路。
就是給定乙個有向圖,現有兩個操作,操作 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
611
1 #include 2 #include 3view codeusing
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 }
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行...