NOIP考綱 圖論
function lca(a,b:longint):longint;
var
i,j:longint;
begin
if deep[a]<depp[b] then swap(a,b);
i:=0;
while (1<<i)<=deep[a] do inc(i);
dec(i);
for j:=i downto 0 do
if deep[a]-(1<<j)>=deep[b] then a:=f[a,j];
if a=b then exit (a);
for j:=i downto 0 do
if (f[a,j]<>-1)and(f[a,j]<>f[b,j]) then
begin
a:=f[a,j];
b:=f[b,j];
end;
exit(f[a,0]);
end;
tarjan求lca
procedure tarjan(x:longint);
var
i,v:longint;
begin
vis[x]:=1;
fa[x]:=x;
i:=head1[x];
while i<>0 do//第一個鄰接表儲存詢問
begin
v:=go1[i];
if vis[v] then
ans[id[i]]:=find(v);
i:=next1[i];
end;
i:=head[x];//第二個鄰接表儲存圖
while i<>0 do
begin
v:=go[i];
if not vis[v] then
begin
dis[v]:=dis[x]+len[i];
tarjan(v);
fa[v]:=x;
end;
i:=next[i];
end;
end;
3.最小(大)生成樹
kruskal
var f:array[1..1001] of longint;
a:array[0..500001,1..3] of longint;
i,j,k,n,m,x,y,c:longint;
s:int64;
procedure qsort(l,r:longint);
var x,y,m:longint;
begin
x:=l;
y:=r;
m:=a[(l+r) div 2,3];
repeat
while a[x,3]<m do inc(x);
while a[y,3]>m do dec(y);
if x<=y then
begin
a[0]:=a[x];
a[x]:=a[y];
a[y]:=a[0];
inc(x);dec(y);
end;
until x>y;
if l<y then qsort(l,y);
if r>x then qsort(x,r);
end;
function fu(z:longint):longint;
var x,y:longint;
begin
y:=z;
while y<>f[y] do y:=f[y];
while z<>y do
begin
x:=f[z];
f[z]:=y;
z:=x;
end;
exit(y);
end;
begin
readln(n,m);
for i:=1 to m do
begin
readln(x,y,c);
a[i,1]:=x;
a[i,2]:=y;
a[i,3]:=c;
end;
qsort(1,m);
for i:=1 to n do f[i]:=i;
s:=0;
for i:=1 to m do
begin
j:=fu(a[i,1]);
k:=fu(a[i,2]);
if j<>k then
begin
s:=s+a[i,3];
f[j]:=k;
end;
end;
writeln(s);
end.
比較簡單,常用
4.二分圖匹配(匈牙利)(判斷二分圖在最上面的那個網址,當然自己隨手打個染色也是可以的。)
bool dfs(int u){
for(int i = head[u]; i != 0; i = e[i].nex){
int v = e[i].v;
if(!vis[v]){
vis[v] = true;
if(link[v] == -1 || dfs(link[v])){
link[v] = u;
return true;
}
}
}
return false;
}
5.最短路
自行百度。(我覺得不會考dij+heap)
相關推薦
NOIP考綱 圖論
function lca(a,b:longint):longint; var i,j:longint; begin if deep[a]<depp[b] t
NOIP考綱總結+NOIP考前經驗談
提前 測試 pau 也會 過去 分支 保險 ++ urn NOIP考綱總結+NOIP考前經驗談 首先來一張圖,很直觀(截止到2012年數據) 下面是收集的一些,我改了一下 紅色加粗表示特別重要,必須掌握 綠色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序
noip提高組圖論模板
//拓撲排序 void Top(){ for(i=1;i<=n;++i) if(!du[i]) q.push(i); while(!q.empty()){ int u=q.front();q.pop(); ans[++num]=u; for(int i=head[u];i;
OI奇異錄 - NOIP考綱
NOIP考綱 - OI奇異錄 據說NOIP沒有考綱……但是我見過的或者聽聞到的還是記一下,方便複習 持續更新! ◌ 演算法 搜尋演算法 DFS/BFS 迭代加深搜尋 啟發式搜尋 A* 雙端搜尋 動態規劃
NOIP模板複習——圖論
由於圖論中有些演算法的程式碼比較長,就只貼核心程式碼 最短路 floyd void floyd() { int i,j,k; for(k=1;k<=n;++k) for(i=1;i<=n;++i) for(j=1;j<=n;++j
{福利}NOIP考綱總結+NOIP考前經驗談
1.比賽前一天晚上請準備好你的各種證件,事先查好去往考場的路線2.比賽之前請先調整你的螢幕解析度到你喜歡的大小3.比賽之前請把編譯器的字型調為你平時慣用的字型,尤其是注意這種字型中的逗號,點,1,l這種易混淆的字是不是區分明顯4.在不影響視野的情況下,請將字號儘可能調大,方便查錯5.請將題目通讀完以後,再開始
【NOIp複習】圖論演算法模板合集
最小生成樹 Kruskal //Kruskal struct edge{ int from,to,val; }e[maxn]; bool operator < (const
疫情延遲 NOIP模擬 二分答案 圖論
開始 clu http 傳播 解釋 using gis hide n) 題面在最下方。 首先最短路判斷一下有沒有輸出 -1 的情況。 然後把握答案可以二分求解的特點,那就很容易解決了。 令邊中最大的年代為 maxx 那麽就在[1,maxx]中進行二分求解,枚舉年代mid,跑
【noip系列——圖論】貨車運輸
ble 更新 www 回來 現在 可能 路徑 們的 啊啊啊 P1967 貨車運輸 唔快下課啦我先寫寫思路吧qwq 顯然對於每輛貨車經過的路徑中,邊權最小的邊越大,答案越優 ——>先求一個最大生成樹保證樹上的邊邊權值都盡可能大
NOIP複賽複習(十三)圖論演算法鞏固與提高
一、圖的儲存 1、鄰接矩陣 假設有n個節點,建立一個n×n的矩陣,第i號節點能到達第j號節點就將[i][j]標記為1(有權值標記為權值), 樣例如下圖: /*無向圖,無權值*/ i
NOIP複賽複習(五)程式對拍與圖論模板
程式對拍 所謂“對拍”,顧名思義,就是讓兩者相互比對。所謂“兩者”,一是你要測試的程式,二是一個答案在該程式在一定範圍(時間/空間)內結果必定正確的程式(一般是用暴力求解的程式)。對拍一般需要造資料程式(data.exe),保證正確性的暴力對拍程式(test.exe)與測試程式(以moo.e
Noip前的大抱佛腳----圖論
圖論 知識點 Tarjan相關 邊雙和點雙/割邊和割點 強連通分量:有向圖中任意兩個頂點都有相互到達的路徑的一個極大子圖 邊雙連通分量:一個子圖中刪去任意一條邊都不影響圖的連通性 點雙連通分量:一個子圖中刪去任意一個點都不影響圖的連通性 割邊:連線兩個邊雙的邊 割點:連線兩個點雙的點 程式碼如下:
【圖論】2018國慶三校聯考D5T2
分析: 題意非常醜陋。。。簡化出來就一句話:每個點有選中、未選中兩種狀態,現在給出一些矛盾關係,要求加入儘可能少的矛盾關係,使得沒有合法方案。 如此2sat的模型,顯然需要2sat的連邊方式。。。然後直接列舉每個位置選、不選是否合法即可。若不選合法,則考慮其練的邊是否有一個
NOIP 提高組 2014 聯合權值(圖論???)
傳送門 https://www.cnblogs.com/violet-acmer/p/9937201.html 題解: 相關變數解釋: int n; int fa[maxn];//fa[i] : i的父親節點 int w[maxn];//w[i] : i的權值 long lo
【圖論】【DFS】三校聯考10.20T2
題意 尋找有多少條邊滿足:圖中所有奇環都包含這條邊,且這條邊不屬於任何偶環 分析: 最後一個性質好坑。。。一直在想那個性質結果T3都沒來得及做… 直接建一個DFS樹。因為是無向圖,所以只存在樹邊和返祖
2018.11.01 NOIP訓練 圖論(線段樹+倍增+dfs序)
傳送門 一道挺妙的題。 對於詢問點(u,v),如右圖所示,我們可以發現存在一個點m在u->v的路徑中,m子樹的點到u是最近的,m子樹外到v是最近的。其中dis(u,m)=(dis(u,v)-1)/2,且deep[u]>deep[v] 根據這個結論
NOIP 資訊學 奧賽 考綱 考點 模板 裸題 水題
//洛谷 P3372 【模板】線段樹 1//調了會,樣例通過,提交AC 2018-5-8 收穫是 對 線段樹 理解更深刻了 #include <stdio.h>#include <string.h>#define maxn 100100#define LL long longLL n,
【圖論】Car的旅行線路 NOIP 2001
【NOIP2001】Car的旅行線路 題目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅遊。 她知道每個城市都有四個飛機場,分別位於一個矩形的四個頂點上,同一個城市中兩個機場之間有一條筆直的高速鐵路,第I個城市中高速鐵路了的單位里程價格為Ti,任意兩個不同
noip 圖論總結
noip的 圖論是套路最深的,,也是碼力最強的(一碼不慎,全盤皆輸) 所以對於圖論有一些比較基礎的技巧必須要熟練掌握(何為熟練?就是看到類似的問題很快出方法) 分題說一下難點: car: 碼力,以及對時間複雜度的分析 最優貿易:對雙向與單向的處理(分開用兩次spfa) 文
NOIP模擬題 2016.9.24 [貪心] [有依賴的揹包問題] [圖論] [spfa或tarjan縮點+DAGdp]
1.排座椅 (seat.pas/c/cpp) 【問題描述】 上課的時候總有一些同學和前後左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之後,只有有限的D對同學上課時會交頭接耳。同學們在教室