有一張左部 \(n\) 個點,右部 \(m\) 個點,\(t\) 條邊的二分圖,求在強制連哪些邊後,圖的最大匹配會減小。
\(1\leq n,m \leq 10000\) , \(1\leq t\leq 100000\) 。
引入兩個概念:二分圖的必需邊和可行邊。
先說他們該如何判定,我們先用最大流求出二分圖的乙個可行解,得到殘餘網路,我們畫一下圖:
這時 \(1\) 和 \(3\) 匹配, \(2\) 和 \(4\) 匹配,注意到在這種情況下,\((1,3)\) 和 \((2,4)\) 都不可能是必需邊,因為它倆不匹配,可以被另外的邊替代:
這樣可以類推得到結論:
必需邊 \(\leftrightarrow\) 在殘留網路上為匹配邊且兩端點不屬於同乙個強連通分量
可行邊 \(\leftrightarrow\) 在殘留網路上為匹配邊或兩端點在同乙個強連通分量內
而這道題求的就是不可行邊,即可行邊的補集, \(dinic\) 最大流 \(+\)
\(tarjan\) 強連通分量 就做完了。
時間複雜度 \(o(t \sqrt)\) 。
#include#include#include#include#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,b,a) for(int i=b;i>=a;i--)
#define n 20010
#define e 200200
#define inf 0x3f3f3f3f3f
using namespace std;
inline int read()
while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
return s*w;
}int head[n],to[e],nxt[e];
int cnt,n,m,e,s,t;
int cap[e],d[n];
int c[n],dfn[n],low[n],scc,num;
int rlt[n][3]; //short for "relation"
bool in[n];
queueq;
stackst;
void init()
void add_e(int a,int b,bool id)
bool bfs()
}return false;
}int dinic(int x,int flow)
}return flow-rest;
}void tarjan(int x)else if(in[y])
low[x]=min(low[x],dfn[y]);
}if(dfn[x]==low[x])while(y!=x);
}}int main()
s=0,t=m+n+1;
rep(i,1,n)add_e(s,i,1);
rep(i,1,m)add_e(i+n,t,1);
int flow,maxflow;
while(bfs())
rep(i,0,n+m+1)
int ans=0;
rep(i,1,e)
cout<
rep(i,1,e)
return 0;
}
k380沒有驗證碼 羅技K380藍芽鍵盤
關於k380這款產品本身 179 某東羅技自營店 顏色 喜歡藍色,所以選的藍色款,和我的ipad pro的殼殼一樣的顏色。重量 0.5kg左右 碼字 一百多塊錢的東西還談什麼手感,手感自然是不如我心愛的機械鍵盤的,不過這個巧克力鍵盤,普通使用完全沒有問題,打字敲擊聲不大,如果是帶到圖書館或者書店一類...
CF 380菜雞題解
a.給你n個車,時間限制內要走到s。路上有加油站免費加油。對於每輛車,你都可以花2公升油走1步花1分鐘,或者花1公升油走1步花2分鐘。問最小花費。一眼二分就秒了。b.乙個人在貼吧炸魚。然後他炸了好幾次也沒炸到。現在告訴你有n條魚,每條魚的長度為m。魚和魚不重合。求一種炸魚的方案,使得第一次炸到魚的時...
HP Proliant DL 380風扇噪音大
從上週開始,機房裡的hp proliant dl 380 g6伺服器的風扇就一直呼呼在叫,沒有要停歇的跡象,我覺得非常奇怪,我檢視了溫度是正常的,應該不會整排風扇都在強烈運轉才對。無奈之下call了hp的800 得到的答案是可能是ilo的firmware要update。2.先嘗試第乙個更新,如果不好...