loj 1156 二分 最大流)

2021-06-22 05:43:46 字數 1573 閱讀 1348

思路:由於溢位問題,wa了半天,還以為構圖錯了呢,查了半天!一看到最大最小問題,就應該想到二分,二分最大距離,然後建圖跑最大流驗證。

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define maxn 222

8#define maxm 222222

9#define inf 1<<30

10#define fill(a,b) memset(a,b,sizeof(a))

1112

struct

edgeedge[maxm];

1516

intn,d,vs,vt,nv,ne;

17int

head[maxn];

1819

void insert(int u,int v,int

cap)

2031

32int

level[maxn],gap[maxn];

33void bfs(int

vt)3451}

52}5354

intpre[maxn],cur[maxn];

55int sap(int vs,int

vt)56

76 aug=inf;77}

78break;79

}80}81

if(flag)continue;82

int minlevel=nv;

83for(int i=head[u];i!=-1;i=edge[i].next)89}

90if(--gap[level[u]]==0)break

;91 level[u]=minlevel+1

;92 gap[level[u]]++;

93 u=pre[u];94}

95return

maxflow;96}

9798

struct

nodenode[maxn];

102103

void build(int

limit)

104112

for(int i=1;i<=n;i++)

117}

118}

119for(int i=1;i<=n;i++)

123if(d<=limit)insert(vs,vt,2

);124

}125

126int

main()

127137

int low=0,high=d,mid,ans;

138while(low<=high)else

145 low=mid+1

;146

}147 printf("

case %d: %d\n

",t++,ans);

148}

149return0;

150 }

view code

poj 2112 最大流 二分

題意 有k臺擠奶機,c頭奶牛,給出這k c個實體間的距離,求出每頭奶牛都到一台擠奶機去,怎麼分配使奶牛走的最大距離最小。用二分列舉最大距離,include include define n 500 define inf 0x3fffffff int map n n dis n gap n head ...

hdu 3228 最大流 二分

題意 一共有n個城市,一些城市裡有金礦,一些城市裡有倉庫,金礦和倉庫都有乙個容量,有m條邊,每條邊是雙向的,有乙個權值,求將所有金礦裡的儲量都運送到倉庫中,所需要經過的道路中,使最大的權值最小 思路 增設乙個超級源點和乙個超級匯點,源點與每乙個城市相連,容量為 數量,匯點與倉庫相連,容量為倉庫的容量...

poj 2391 二分 最大流

思路 求最短時間,可以想到二分,然後判斷可行性。首先在原圖上求 floyd,得到每兩個棚之間的最短距離。然後拆點 將每個棚拆為 i 和 i 流進和流出 添邊 i,i inf 增加源點 s 和匯點 t,從 s 連邊到 i,容量為該棚現在的貓的數量,i 連邊到 t,容量為該棚的容量。若棚 i 和棚 j ...