CF786E ALT 網路流,倍增

2021-10-25 07:26:50 字數 1223 閱讀 8288

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()

;}