=======markdown
*奇環樹:找出環,斷邊變樹;;或者分兩部分
環網絡
struct Edge{ int from,to,dist; Edge(){} //??要寫構造函數? }
不寫了。;。學習
*Prim:
千萬不要寫register。inline還行code
priority_queue<pair<int,int>, vector<pair<int,int> >,greater<pair <int,int> > > int prim(){ int ans=0; q.push(make_pair(0,1)) }
https://www.luogu.com.cn/problem/P1265
https://www.luogu.com.cn/problem/P5687
貨車運輸:最小權值最大
?
災後重建 https://www.luogu.com.cn/problem/P1119
物流運輸 https://www.luogu.com.cn/problem/P1772
最優貿易 https://www.luogu.com.cn/problem/P1073
逛公園 https://www.luogu.com.cn/problem/P3953 :分層圖,額外花費=w-(d[j]-d[i])分的層(DAG)
Legacy https://www.luogu.com.cn/problem/CF786B 區間最短路
今晚搞一搞線段樹唄get
A終點未被訪問過,樹枝邊
B終點被訪問過,dfn[v]>dfnu,前向邊(
C終點已被訪問過,不在子樹中,在棧中,後向邊
D終點被訪問過,且不在子樹中,不在棧中,橫叉邊(it
*Tarjan
有向有環圖DFS找每個強連通份量
每個強連通份量高度最低的點做表明點(分割點)
(每個強聯通份量的點必定連續訪問)
分割的方法:維護一個棧(並不是DFS的棧)存放節點,離開分割點時把分割點往下的部分所有取出來就是一個強連通份量
如今須要找到這些分割點:::
。。。。。。。。。
我學廢了。晚上先搞tarjan吧io
void tarjan(int now){ dfn[low]=low[now]=++dfscnt; s[stop++]=now; for(int i=he[how];i;i=ne[i]){ if(!dfn[ed[i]]){ tarjan(ed[i]); low[now]=min(low[now],low[ed[i]]); } else if(!) } }
//抄啥,他會發的;__;
模板:
https://www.luogu.com.cn/problem/P3387模板
校園網
https://www.luogu.com.cn/problem/P2746
至少把出度爲零的點(t個)加上邊,連到入口點,總能構造一個環;
須要鏈接max(出口點數,入口點數)個邊。因此必定存在這個方案。只需求出數目。class
雙連通份量
在無向圖上。點雙聯通,邊雙聯通。
不雙聯通的話,割點(頂),割邊(橋)通常就考這個。縮完是一棵樹,很差考。
點雙聯通不知足傳遞性,邊雙聯通知足。
點雙聯通必定是邊雙聯通(無相同點的兩條路景必定無相同邊)
.....懵。.。.
換教室P1850(hard)
提升組範圍內,很難玩出什麼花,頂可能是分層圖。。本質是多保存幾個狀態。 (進一步學習網絡流以後思惟難度纔會提高