思路:由於溢位問題,wa了半天,還以為構圖錯了呢,查了半天!一看到最大最小問題,就應該想到二分,二分最大距離,然後建圖跑最大流驗證。
1 #include2 #include3 #include4 #include5 #include6view codeusing
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 }
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 ...