现在的位置: 首页 > 综合 > 正文

HDU 4280 Island Transport(网络…

2018年03月17日 ⁄ 综合 ⁄ 共 1241字 ⁄ 字号 评论关闭
题意:有N个岛屿 M条无向路 每个路有一最大允许的客流量,求从最西的那个岛屿最多能运用多少乘客到最东的那个岛屿。

思路:很单纯的网络流,重点是卡时间 模板的高效性很重要啊该模板详解 参见这里  模板题就不注释了

//4796MS   
8836K

#include <stdio.h>
#include <string.h>
#define VM 100010
#define EM 400010
const int inf = 0x3f3f3f3f;
struct E
{
    int to, frm,
nxt, cap;
}edge[EM];

int head[VM],e,n,m,src,des;
int dep[VM], gap[VM];

void addedge(int cu, int cv, int cw)
{
    edge[e].frm
= cu;
    edge[e].to =
cv;
    edge[e].cap
= cw;
    edge[e].nxt
= head[cu];
    head[cu] =
e++;
    edge[e].frm
= cv;
    edge[e].to =
cu;
    edge[e].cap
= 0;
    edge[e].nxt
= head[cv];
    head[cv] =
e++;
}

int que[VM];

void BFS()
{
    memset(dep,
-1, sizeof(dep));
    memset(gap,
0, sizeof(gap));
    gap[0] =
1;
    int front =
0, rear = 0;
    dep[des] =
0;
    que[rear++]
= des;
    int u,
v;
    while (front
!= rear)
    {
   
    u =
que[front++];
   
    front =
front%VM;
   
    for (int
i=head[u]; i!=-1; i=edge[i].nxt)
   
    {
   
   
    v =
edge[i].to;
   
   
    if
(edge[i].cap != 0 || dep[v] != -1)
   
   
   
   
continue;
   
   
    que[rear++]
= v;
   
   
    rear = rear
% VM;
   
   
    ++gap[dep[v]
= dep[u] + 1];
   
    }
    }
}
int cur[VM],stack[VM];
int
Sap()      
//sap模板
{
    int res =
0;
    BFS();
    int top =
0;
    memcpy(cur,
head, sizeof(head));
    int u = src,
i;
    while
(dep[src] < n)
    {
   
    if (u ==
des)
   
    {
   
   
    int temp =
inf, inser = n;
   
   
    for (i=0;
i!=top; ++i)
   
   
   
    if (temp
> edge[stack[i]].cap)
   
   
   
    {
   
   
   
   
  

抱歉!评论已关闭.