description
小明經常去n 個地點,其中有些地點之間有直接的無向道路(共m 條這樣的道路),可以直接互相到達,這些道路的長短不一。由於小明對這些道路都很熟悉,無論起點和終點在**,總能走最短路。小明有嚴重的強迫症,認為奇數很不和諧,如果他某一天從乙個地點去另乙個地點走過的路程是奇數,就會很不爽,但他又不想白白多走路,所以遇到最短路長度是奇數的情況就只能忍了。
如果從某個地點a 到另乙個地點b 的最短路徑長度為奇數,則稱這條最短路徑為「不和諧最短路」。如果一條不和諧最短路上包含地點c,則稱它為「經過c 的不和諧最短路」。現在請你程式設計求出對於每個地點,經過它的不同的不和諧最短路數量。兩條最短路不同,當且僅當它們途徑的地點的序列不同。
input
第一行兩個正整數n;m,含義見題面。
接下來m 行,每行三個正整數ai;bi;li,表示一條無向道路的兩端和長度。
output
n 行每行乙個整數,第i 行表示經過第i 個點的不同的不和諧最短路條數。
sample input
4 41 4 1
1 2 1
3 4 100
2 3 2
sample output64
22樣例說明
長度為奇數的最短路有:1 → 2; 1 → 2 → 3; 1 → 4; 2 → 1; 3 → 2 → 1; 4 → 1。
這些路徑中四個點的經過次數分別為6, 4, 2, 2。
其它一些路,如1 → 4 → 3 不是最短路,2 → 3 是最短路但長度為2,是偶數。這些路都不計入答案。
data constraint
對於50% 的資料,n ≤ 100;
對於全部資料,n ≤ 1000;m ≤ 3000,每條路的長度不超過1000。
保證圖連通,無自環重邊。..
...分析
題目中的圖是一般圖,結構複雜沒有規律。考慮列舉起點並計算單源最短路,保留所有最短路中的邊(有向),原圖就變成了乙個 dag,可以很方便地在上面進行拓撲排序,dp 等。再考慮長度為奇數的最短路,從乙個點斷開,一定是一邊長度為奇數,另一邊長度為偶數。因此可以在 dag 上 dp 計算從起點到達每個點的奇偶最短路徑分別有幾條,再逆序 dp 計算從每個點出發的奇偶最短路徑條數,在後面的 dp 過程中順便統計答案。這樣對每個起點算一遍。
複雜度 o(nm log n)。..
...程式:
#include#include#include#includeusing namespace std;
int ans[2000],d[2000],head[2000],pre[2000],n,m,cnt=1;
bool f[2000];
queueq;
struct node
edge[10000];
void add(int x,int y,int z)
void dfs(int x,int y)
for (int i=head[x];i;i=edge[i].next) }
}void spfa(int x)
}} q.pop();
} dfs(x,0);
}int main()
for (int i=1;i<=n;i++)
spfa(i);
for (int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return 0;
}
4246 五校聯考6day2 san
小明經常去n 個地點,其中有些地點之間有直接的無向道路 共m 條這樣的道路 可以直接互相到達,這些道路的長短不一。由於小明對這些道路都很熟悉,無論起點和終點在 總能走最短路。小明有嚴重的強迫症,認為奇數很不和諧,如果他某一天從乙個地點去另乙個地點走過的路程是奇數,就會很不爽,但他又不想白白多走路,所...
五校聯考6day2 er
description 小明在業餘時間喜歡打電子遊戲,不是星際和魔獸這些,是賽爾號一類的遊戲。最近小明在玩一款新出的遊戲,叫做 小明覺得遊戲裡自己的裝備太垃圾了,每次都被大神虐,一怒之下充了 元準備強化裝備。這個遊戲中用於強化裝備的道具叫做強化符文。有以下3 種 賦值強化符文,對某個裝備使用這個符文...
4244 五校聯考6day2 yi
小明是 星際旅遊公司的員工,負責安排飛船,有n 艘飛船由他管理,每艘飛船能容納的人數都不同。今天小明被要求為乙個去銻星的旅遊團安排往返的飛船,旅遊團有m人,小明希望用最少的飛船完成任務。但不是所有的飛船都能用的,地球和銻星距離k镾 此單位由銻星人發明,後在星際旅遊業界廣泛使用 而每一艘飛船加滿燃料後...