清北學堂noip2018集訓D4

2021-08-28 16:47:09 字數 2475 閱讀 2577

p.s.

最小生成樹,最短路問題,spfa演算法,強連通分量。

鄰接矩陣

時間 **如下

#include

using

namespace std;

int n,m;

// n*n

int graph[

105]

[105];

intmain()

for(

int i=

0;i) cout<}return0;

}

鄰接錶鏈表儲存

遍歷圖最短路

單源最短路

dijkstra 迪傑斯特拉演算法

從所有點中選擇未標記的dis

[i

]dis[i]

dis[i]

值最小的頂點i

ii,將i

ii標記;

鬆弛節點i

ii的相鄰節點

若所有點都被標記,結束。否則回到1

**:

#include

#include

#include

#include

#include

using

namespace std;

int n,m;

// 陣列鍊錶 鄰接表

// 煉表頭 鍊錶節點的下乙個節點 這條邊指向圖中的點 邊的權值

int head[

10005

],nxt[

30005

], ver[

30005

], w[

30005];

int tot;

// 記錄鍊錶節點用了多少個

void

add(

int x,

int y,

int z)

struct nn(

int a=0,

int b=0)

};priority_queue pq;

int d[

10005];

bool vis[

10005

]int

main()

int s=1;

memset

(d,0x3f

,sizeof d)

;// 0x3f3f3f3f

d[s]=0

; pq.

push(n

(s,d[s]);

// pq.push((n));

while

(!pq.

empty()

)}}// d

// d[x] == 0x3f3f3f3f 不連通

return0;

}

spfa

將源點s出隊。

從佇列裡取出頭的點v,用原點到v的當前最短距離來更新源點到與v相鄰的點的最短距離(鬆弛操作)

將最短距離更新過且不在佇列中的點入隊。

回到第二步,直到隊列為空為止。

最小生成樹

kruskal

給所有邊按照邊權從小到大的順序排序;

從小到大依次考慮每條邊(u,v)(最開始沒有任何的邊):

如果u 與v 已經連通了,那麼加入(u,v) 後會出現環,不新增

如果u 與v 沒有連通,那麼加入(u,v) 使其連通

並查集維護連通性。

**如下:

#include

#include

#include

#include

#include

using

namespace std;

int n,m;

int fa[

1000005];

// fa[x] x在並查集樹上的父親是誰

intget

(int x)

void

merge

(int x,

int y)

struct edgeedge[

1000005];

bool

cmp(edge&a,edge&b)

intmain()

sort

(edge+

1,edge+m+

1,cmp)

;int sum =0;

for(

int i=

1;i<=m;i++)}

printf

("%d"

,sum)

;// 貨車運輸

/* for(int i=1;i<=m;i++)

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

} */

return0;

}

清北學堂 2017 10 01

problem 1.alien input file alien.in output file alien.out time limit 1s memory limit 128m 小y 最近正在接受來自x3 星球的外星人的採訪。在那個星球上,每個人的名字都是乙個正整數。所有在這個星球上的居民都是相互...

清北學堂 2017 10 06

因為是剛聽完課所以想把思路記下來,有一些其實也是一知半解的,如果有dalao可以幫忙講解那真是再感謝不過了。還有為什麼我畫圖這麼醜,哇的一下哭出聲 problem a.最佳進製 如今我們最常用的是十進位制,據說這是因為人有十根手指。但事實上這並不是十分方便,10 只有四個因子 1 2 5 10,像 ...

清北學堂 Pa

pa 題目描述 漢諾塔公升級了 現在我們有?個圓盤和?個柱子,每個圓盤大小都不一樣,大的圓盤不能放在小的圓盤上面,個柱子從左到右排成一排。每次你可以將一 個柱子上的最上面的圓盤移動到右邊或者左邊的柱子上 如果移動之後是合法的 話 現在告訴你初始時的狀態,你希望用最少的步數將第?大的盤子移動到第?根 ...