題目鏈結
蒟蒻hansbug在一本語文書裡面發現了一本答案,然而他卻明明記得這書應該還包含乙份練習題。然而出現在他眼前的書多得數不勝數,其中有書,有答案,有練習冊。已知乙個完整的書冊均應該包含且僅包含一本書、一本練習冊和乙份答案,然而現在全都亂做了一團。許多書上面的字跡都已經模糊了,然而hansbug還是可以大致判斷這是一本書還是練習冊或答案,並且能夠大致知道一本書和答案以及一本書和練習冊的對應關係(即僅僅知道某書和某答案、某書和某練習冊有可能相對應,除此以外的均不可能對應)。既然如此,hansbug想知道在這樣的情況下,最多可能同時組合成多少個完整的書冊。
實質是個三分圖匹配(自己yy的) ,一道網路流模板題。
和二分圖匹配類似,但中間的圖要拆成兩個點,並連上容量為1的邊,保證中間的點不被匹配多次。
#include
#include
#include
#include
#include
#include
#include
#define set(a,b) memset(a,b,sizeof(a))
#define copy(a,b) memcpy(a,b,sizeof(a))
using
namespace
std;
inline
int read()
const
int m=1e6+20;
const
int inf=1e9;
const
int n=5e4;
struct edgea[m<<1];
int head[n];
int dis[n];
int cnt=0;
int cur[n];
int n,m,k;
int tot;
inline
void add(int x,int y,int z)
; head[x]=cnt++;
}queue
q;inline
void clear(queue
&q)
inline
bool bfs()
}return (dis[tot]!=-1);
}inline
int dfs(int u,int flow)
return flow-delta;
}inline
void dinic()
int main()
for(register
int i=1;i<=k;i++)
for(register
int i=1;i<=n;i++) add(i,i+n,1),add(i+n,i,0);
register
int x,y;
for(register
int i=1;i<=op;i++)
op=read();
for(register
int i=1;i<=op;i++)
dinic();
}
Luogu P1231 教輔的組成
有 text 本書 text 本練習冊 text 本答案,一本書只能和一本練習冊和一本答案配對。給你一些書和練習冊,書和答案的可能的配對關係。問你最多可以配成多少套完整的書冊。我已開始直接建立超級源點匯點,然後源點 rightarrow 練習冊連邊,練習冊 rightarrow 書連邊,書 righ...
P1231 教輔的組成
題目 啊,又是煩人的拆點,其實網路瘤一堆題都是拆點,本題顯然要把書,練習冊 53 答案 學生的福音 分開,但是,書作為中轉的地方,是具有唯一性的,不能2本53都配同一本書,這時我們還需要用拆點思想保障書是唯一的。code include include include include include...
落谷 P1231 教輔的組成
恩呃呃呃 給你a,b,c三類的物品,給出a,b b,c的匹配關係,乙個a,b,c類物品在一起就算一套物品。求出最多可以有多少套物品。最大流的問題,建立乙個超級源點和超級匯點,然後a b b c連邊,從源點跑一次網路流然後就可以求出答案了 include include include include...