程式設計思維與實踐第七周作業

2021-10-05 04:52:25 字數 4438 閱讀 2439

眾所周知,tt 有乙隻魔法貓。

這一天,tt 正在專心致志地玩《貓和老鼠》遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?

魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝負關係,每個勝負關係為 a b,表示 a 能勝過 b,且勝負關係具有傳遞性。即 a 勝過 b,b 勝過 c,則 a 也能勝過 c。

tt 不相信他的小貓咪什麼比賽都能**,因此他想知道有多少對選手的勝負無法預先得知,你能幫幫他嗎?

第一行給出資料組數。

每組資料第一行給出 n 和 m(n , m <= 500)。

接下來 m 行,每行給出 a b,表示 a 可以勝過 b。

對於每一組資料,判斷有多少場比賽的勝負不能預先得知。注意 (a, b) 與 (b, a) 等價,即每乙個二元組只被計算一次。

33 3

1 21 3

2 33 2

1 22 3

4 21 2

3 4004

這道題是求任意兩點之間的勝負關係,我們使用floyd演算法求解,當d[i][j]為1證明i勝於j,若為0,證明勝負關係未知。

使用floyd來進行關係的傳遞,對每個邊需要進行&操作,而不是求最短路時的相加操作。在求解時需要剪枝,當d[i][k]==0時,無論d[k][j]是否為1,d[i][j]的勝負關係都不能確定,此時可以直接跳過。

#include#include#includeusing namespace std;

int d[510][510];

int main()

for(int k=0;k眾所周知,tt 有乙隻魔法貓。

今天他在 b 站上開啟了一次旅行直播,記錄他與魔法貓在喵星旅遊時的奇遇。 tt 從家裡出發,準備乘坐貓貓快線前往喵星機場。貓貓快線分為經濟線和商業線兩種,它們的速度與價錢都不同。當然啦,商業線要比經濟線貴,tt 平常只能坐經濟線,但是今天 tt 的魔法貓變出了一張商業線車票,可以坐一站商業線。假設 tt 換乘的時間忽略不計,請你幫 tt 找到一條去喵星機場最快的線路,不然就要誤機了!

輸入包含多組資料。每組資料第一行為 3 個整數 n, s 和 e (2 ≤ n ≤ 500, 1 ≤ s, e ≤ 100),即貓貓快線中的車站總數,起點和終點(即喵星機場所在站)編號。

下一行包含乙個整數 m (1 ≤ m ≤ 1000),即經濟線的路段條數。

接下來有 m 行,每行 3 個整數 x, y, z (1 ≤ x, y ≤ n, 1 ≤ z ≤ 100),表示 tt 可以乘坐經濟線在車站 x 和車站 y 之間往返,其中單程需要 z 分鐘。

下一行為商業線的路段條數 k (1 ≤ k ≤ 1000)。

接下來 k 行是商業線路段的描述,格式同經濟線。

所有路段都是雙向的,但有可能必須使用商業車票才能到達機場。保證最優解唯一。

對於每組資料,輸出3行。第一行按訪問順序給出 tt 經過的各個車站(包括起點和終點),第二行是 tt 換乘商業線的車站編號(如果沒有使用商業線車票,輸出"ticket not used",不含引號),第三行是 tt 前往喵星機場花費的總時間。

本題不忽略多餘的空格和製表符,且每一組答案間要輸出乙個換行

4 1 4

41 2 2

1 3 3

2 4 4

3 4 5

12 4 3

1 2 425

由於存在可乘坐一次的商業線,可以分為兩種情況,使用商業線車票和不使用商業線車票。如果使用商業線車票,我們需要最短路演算法求出起點到商業線的時間和商業線到終點的時間相加,再加上商業線花費的時間就是起點到終點的時間。

我們可以列舉每一條商業線,求出經過每一條商業線花費的時間的最小值,與不使用商業線車票比較,取最小值就是答案。這裡可以使用dijkstra演算法求最短路。

#include#include#include#include#includeusing namespace std;

const int maxx=1010;

const int inf=10010000;

int n,s,e;

int tot,head[maxx],vis[maxx];

int dis1[maxx],dis2[maxx],pre1[maxx],pre2[maxx];

struct edge

e[maxx*5];

struct node

a[maxx*5];

void add(int u,int v,int w)

void dijkstra(int s,int *dis,int *pre)

); while(q.size())

); }

} }

}int main()

cin>>n;

for(int i=0;i>u>>v>>w;

a[i].from=u;

a[i].to=v;

a[i].cost=w;

} dijkstra(s,dis1,pre1);

dijkstra(e,dis2,pre2);

int change=-1;

node minn;

int aa=dis1[e],bb=dis1[e];

bool flag=true;

int l,k;

l=k=e;

for(int i=0;idis1[a[i].from]+dis2[a[i].to]+a[i].cost))

else if(bb>dis2[a[i].from]+dis1[a[i].to]+a[i].cost)

}int ans;

if(aabb&&bb!=dis1[e])

else ans=dis1[e];

int cnt=0;

vectorback;

if(flag)

for(int j=0;j=0;j--) cout《這一晚,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 則輸出 『?』。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

case 1:34

case 2:??

這道題需要求最短路,但是邊權根據他的定義,可能存在負數,因此可能會出現負環,此時不能用dijkstra演算法求解,需要用spfa演算法來求。

使用spfa演算法求最短路和判斷負環,spfa演算法是通過相鄰點的鬆弛來求最短路,由於最短路最多n-1條邊,當經過同乙個點鬆弛次數多於n次,說明存在負環,鬆弛操作進入死迴圈。當找到乙個負環,負環上所有點以及與負環相連的點都不存在最短路,可以使用bfs找到這些點進行標記。

#include#include#include#include#include#includeusing namespace std;

struct point

;int t,n,m,q;

int a[500],d[500],used[500];

int cnt[500],flag[500],vis[500];

int main()

queueq;

d[1]=0;

used[1]=1;

q.push(1);

while(!q.empty())

}}

Coursera C 程式設計 第七周作業

注意 總時間限制 1000ms 記憶體限制 65536kb 實現乙個三維陣列模版carray3d,可以用來生成元素為任意型別變數的三維陣列,使得下面程式輸出結果是 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,...

程式設計與演算法(三)第七周 作業

027 簡單的sumarray include include using namespace std template t sumarray t a,t b return sum int main cout sumarray array,array 4 endl cout sumarray a,a...

第七周作業作業

1 自建yum倉庫,分別為網路源和本地源 建立yum配置檔案,類似如下 base name base baseurl file misc cd gpgcheck 0 epel name epel baseurl gpgcheck 0 enabled 1 本地源 以前自己整理的 2 編譯安裝http2...