2020年8月5日听课笔记
听课笔记
=======
*奇环树:找出环,断边变树;;或者分两部分
环
struct Edge{
int from,to,dist;
Edge(){}
//??要写构造函数?
}
不写了。;。
*Prim:
千万不要写register。inline还行
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 区间最短路
今晚搞一搞线段树呗
A终点未被访问过,树枝边
B终点被访问过,dfn[v]>dfnu,前向边(
C终点已被访问过,不在子树中,在栈中,后向边
D终点被访问过,且不在子树中,不在栈中,横叉边(
*Tarjan
有向有环图DFS找每一个强连通分量
每一个强连通分量高度最低的点作代表点(分割点)
(每一个强联通分量的点一定连续访问)
分割的方法:维护一个栈(并非DFS的栈)存放节点,离开分割点时把分割点往下的部分全部取出来就是一个强连通分量
现在需要找到这些分割点:::
。。。。。。。。。
我学废了。晚上先搞tarjan吧
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(出口点数,入口点数)个边。所以一定存在这个方案。只需求出数目。
双连通分量
在无向图上。点双联通,边双联通。
不双联通的话,割点(顶),割边(桥)一般就考这个。缩完是一棵树,不好考。
点双联通不满足传递性,边双联通满足。
点双联通一定是边双联通(无相同点的两条路景一定无相同边)
.....懵。.。.
换教室P1850(hard)
提高组范围内,很难玩出什么花,顶多是分层图。。本质是多保存几个状态。
(进一步学习网络流之后思维难度才会提升