題目描述:
這一晚,tt 做了個美夢!
在夢中,tt 的願望成真了,他成為了喵星的統領!喵星上有 n 個商業城市,編號 1 ~ n,其中 1 號城市是 tt 所在的城市,即首都。
喵星上共有 m 條有向道路供商業城市相互往來。但是隨著喵星商業的日漸繁榮,有些道路變得非常擁擠。正在 tt 為之苦惱之時,他的魔法小貓咪提出了乙個解決方案!tt 欣然接受並針對該方案頒布了一項新的政策。
具體政策如下:對每乙個商業城市標記乙個正整數,表示其繁榮程度,當每乙隻喵沿道路從乙個商業城市走到另乙個商業城市時,tt 都會收取它們(目的地繁榮程度 - 出發地繁榮程度)^ 3 的稅。
tt 打算測試一下這項政策是否合理,因此他想知道從首都出發,走到其他城市至少要交多少的稅,如果總金額小於 3 或者無法到達請悄咪咪地打出 『?』。
輸入:第一行輸入 t,表明共有 t 組資料。(1 <= t <= 50)
對於每一組資料,第一行輸入 n,表示點的個數。(1 <= n <= 200)
第二行輸入 n 個整數,表示 1 ~ n 點的權值 a[i]。(0 <= a[i] <= 20)
第三行輸入 m,表示有向道路的條數。(0 <= m <= 100000)
接下來 m 行,每行有兩個整數 a b,表示存在一條 a 到 b 的有向道路。
接下來給出乙個整數 q,表示詢問個數。(0 <= q <= 100000)
每一次詢問給出乙個 p,表示求 1 號點到 p 號點的最少稅費。
輸出:每個詢問輸出一行,如果不可達或稅費小於 3 則輸出 『?』。
sample:
input:25
6 7 8 9 10
61 2
2 33 4
1 55 4
4 5245
101 2 4 4 5 6 7 8 9 10
101 2
2 33 1
1 44 5
5 66 7
7 88 9
9 10
23 10
output:
case 1:34
case 2:??
題目分析:
這個問題和前面的有點區別,這裡的權重會出現負數,以往的都是正數,這樣求最小的時候就會發現,如果按照以往的演算法來計算,有可能會沿著負數一直走(因為求最小,負數越加越小,然後選中它繼續走),這樣就會出現走不出去原地打轉了,所以我們需要一種新方法,那就是spfa。
for
(int i=
1;i<=n;i++
) dis[1]
=0; queue<
int> q;
q.push(1
);vis[1]
=true
;while
(!q.
empty()
)if(vis[e[i]
.v]==
false)}
}}
其餘的spfa方法和課堂上講的一樣,現在就看對於負環如何處理了。首先找路徑最大也就是生成樹,而生成樹的邊數一定是點的個數-1,所以如果找邊的時候發現找到的邊的個數大於n了就說明至少有乙個點走了兩邊,也就是成環了。此時我們需要終止掉,那也意味著這種情況下是無解的。之後我們就可以按照這個點為起點進行dfs來找與它相連的所有的點(剛好也就是那個環),這個樣子以後要再查詢點的時候就可以直接輸出?了。
void
dfs(
int u)
}}
當然其餘的圖的表示都是一樣的。
struct edge
e[maxx]
;int head[maxx]
,tot;
void
addedge
(int u,
int v,
int w)
這樣,輸出判斷就簡單了。輸入乙個點,如果這個點的距離小於3,或者這個點走的路是閉環,或者乾脆都沒法走到這個點上,那麼就可以輸出?,否則就輸出距離。當然要注意這裡面的需要是要對應起來的,尤其是case這一行是要作為文字輸出的。
cout<<
"case "
<1<<
":"
cin>>q;
for(
int i=
0;i)else
}
**如下:
#include
#include
#include
using
namespace std;
#define maxx 100050
#define inf 1919810
struct edge
e[maxx]
;int head[maxx]
,tot;
void
addedge
(int u,
int v,
int w)
bool no[maxx]
;void
dfs(
int u)
//發現閉環之後的遍歷}}
int point[maxx]
,dis[maxx]
,a[maxx]
;bool vis[maxx]
;int
main()
int m;
cin>>m;
for(
int i=
1;i<=m;i++
)for
(int i=
1;i<=n;i++
) dis[1]
=0; queue<
int> q;
q.push(1
);vis[1]
=true
;while
(!q.
empty()
)if(vis[e[i]
.v]==
false)}
}}cout<<
"case "
<1<<
":"
cin>>q;
for(
int i=
0;i)else}}
}
第七周作業作業
1 自建yum倉庫,分別為網路源和本地源 建立yum配置檔案,類似如下 base name base baseurl file misc cd gpgcheck 0 epel name epel baseurl gpgcheck 0 enabled 1 本地源 以前自己整理的 2 編譯安裝http2...
第七周作業
書中習題1 說說下列程式的執行過程和運算結果 include includeusing namespace std double squ double x 函式原形 int main 主函式 書2,不用庫函式,求整數次冪 3.程式設計實現輸入兩個4x5矩陣和5x3矩陣,定義函式並在主函式中呼叫計算它...
第七周作業
1 列舉常見的核心引數以及引數的意義 1 net.ipv4.ip forward 資料報的路由 開關,設定為1表示開啟,0表示關閉。2 vm.drop caches 清空caches,釋放記憶體占用。設定為1表示清空 pagecache,設定為2表示清空 dentries 和 inodes,設定為3...