n
nn個點的一棵樹,m
mm個人每個人走乙個路徑。
給一些人狗或者一些邊狗每個人要求要麼它自己有狗要麼它走的路徑上都有狗。
考慮最小割,其實就是要麼割乙個人要麼割一整條路徑,然後倍增優化連邊即可。
#include
#include
#include
#include
using
namespace std;
const
int n=
21000
,inf=
2147483647/3
;struct nodea[n*20]
;int s,t,cnt,n,m,tot,f[n][20
],p[n][20
],vi[n]
,ls[n]
,dep[n]
,z[n]
;struct net_flow
bool
bfs()}
return0;
}int
dinic
(int x,
int flow)if(
!rest)dep[x]=1
;return rest;
}void
get_netf()
}nf;
void
addl
(int x,
int y)
void
dfs(
int x)
}void
add_path
(int pos,
int x,
int y)
nf.addl
(pos,p[x][0
],inf)
; nf.
addl
(pos,p[y][0
],inf)
;return;}
intmain()
s=++cnt;t=
++cnt;dep[1]
=1;dfs(1
);for(
int j=
1;j<
16;j++
)for
(int i=
1;i<=n;i++
)for
(int i=
1;i<=m;i++
) nf.
get_netf()
;}