萌新求助
我一开始建图是这样的:
signed main()
{
s = 0;
t = n1 * 2 + n2 + n3 + 5;
cin>>n1>>n2>>n3>>m1;
for(int i = 1;i <= 2 * n1;i += 2)add(i, i + 1, 1);
for(int i = n1 * 2 + 1;i <= n1 * 2 + n2;i ++)add(s, i, 1);
for(int i = n1 * 2 + n2 + 1;i <= n1 * 2 + n2 + n3;i ++)add(i, t, 1);
for(int i = 1;i <= m1;i ++)
{
int u = read(), v = read();
add(n1 * 2 + v, u * 2 - 1, 1);
}
cin>>m2;
for(int i = 1;i <= m2;i ++)
{
int u = read(), v = read();
add(u * 2, n1 * 2 + n2 + v, 1);
}
while(bfs())ans += dfs(s, 1e18);
cout<<ans<<endl;
return 0;
}
后来我改成了这样:
signed main()
{
s = 0;
t = n1 * 2 + n2 + n3 + 1000;
cin>>n1>>n2>>n3>>m1;
for(int i = 1;i <= 2 * n1;i += 2)add(i, i + 1, 1);
for(int i = n1 * 2 + 1;i <= n1 * 2 + n2;i ++)add(s, i, 1);
for(int i = n1 * 2 + n2 + 1;i <= n1 * 2 + n2 + n3;i ++)add(i, t, 1);
for(int i = 1;i <= m1;i ++)
{
int u = read(), v = read();
add(n1 * 2 + v, u * 2 - 1, 1);
}
cin>>m2;
for(int i = 1;i <= m2;i ++)
{
int u = read(), v = read();
add(u * 2, n1 * 2 + n2 + v, 1);
}
while(bfs())ans += dfs(s, 1e18);
cout<<ans<<endl;
return 0;
}
可以看出,只是把 t 的坐标加的更大了。为什么前面那种 wa 50 后面 ac 啊/kk