不想说题意了 。作法和POJ 2112相同。
但是TLE 10+。。。其实一开始我也没注意数据,但是TLE之后才发现N = 200 ,E = 40000 ,dinic的复杂度是 N * N * E ,这样就8E了。。就TLE了。
最后翻了下DISCUSS,发现数据还是没那么变态的,但是算法得加优化,这道题也加深了我对dinic算法的理解。
刚才把前面做过的网络流代码都加了这个优化的判断,发现速度快了一倍左右。。。
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct kdq
{
int s , e , l ,next ;
} ed[Max * 100] ;
struct kdq1
{
int s ,e ,l ;
} e[40005] ;
int head[205] ,num ;
int S,T ;
void add(int s ,int e ,int l )
{
ed[num].s = s ;
ed[num].e = e ;
ed[num].l = l ;
ed[num].next = head[s] ;
head[s] = num ++ ;
ed[num].s = e ;
ed[num].e = s ;
ed[num].l = 0 ;
ed[num].next = head[e] ;
head[e] = num ++ ;
}
void init()
{
memset(head,-1,sizeof(int) * (T + 1)) ;
num = 0 ;
}
int deep[205] ;
int qe[Max * 100] ;
int dinic_bfs()
{
memset(deep,-1,sizeof(int) * (T + 1)) ;
deep[S] = 0 ;
int h = 0 ,t = 0 ;
qe[h ++ ] = S ;
while(h > t)
{
int tt = qe[t ++ ] ;
for (int i = head[tt] ; ~i ; i = ed[i].next )
{