hdu 6214

#include <bits/stdc++.h>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#define TS printf("!!!\n")
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = ; //点数的最大值
const int MAXM = ; //边数的最大值 struct Node
{
int from, to, next;
int cap;
} edge[MAXM];
int tol; int dep[MAXN];//dep为点的层次
int head[MAXN]; int n;
void init()
{
tol = ;
memset(head, -, sizeof(head));
}
void addedge(int u, int v, int w) //第一条变下标必须为偶数
{
edge[tol].from = u;
edge[tol].to = v;
edge[tol].cap = w;
edge[tol].next = head[u];
head[u] = tol++;
edge[tol].from = v;
edge[tol].to = u;
edge[tol].cap = ;
edge[tol].next = head[v];
head[v] = tol++;
} int BFS(int start, int end)
{
int que[MAXN];
int front, rear;
front = rear = ;
memset(dep, -, sizeof(dep));
que[rear++] = start;
dep[start] = ;
while (front != rear)
{
int u = que[front++];
if (front == MAXN)
{
front = ;
}
for (int i = head[u]; i != -; i = edge[i].next)
{
int v = edge[i].to;
if (edge[i].cap > && dep[v] == -)
{
dep[v] = dep[u] + ;
que[rear++] = v;
if (rear >= MAXN)
{
rear = ;
}
if (v == end)
{
return ;
}
}
}
}
return ;
}
int dinic(int start, int end)
{
int res = ;
int top;
int stack[MAXN];//stack为栈,存储当前增广路
int cur[MAXN];//存储当前点的后继
while (BFS(start, end))
{
memcpy(cur, head, sizeof(head));
int u = start;
top = ;
while ()
{
if (u == end)
{
int min = INF;
int loc;
for (int i = ; i < top; i++)
if (min > edge[stack[i]].cap)
{
min = edge[stack[i]].cap;
loc = i;
}
for (int i = ; i < top; i++)
{
edge[stack[i]].cap -= min;
edge[stack[i] ^ ].cap += min;
}
res += min;
top = loc;
u = edge[stack[top]].from;
}
for (int i = cur[u]; i != -; cur[u] = i = edge[i].next)
if (edge[i].cap != && dep[u] + == dep[edge[i].to])
{
break;
}
if (cur[u] != -)
{
stack[top++] = cur[u];
u = edge[cur[u]].to;
}
else
{
if (top == )
{
break;
}
dep[u] = -;
u = edge[stack[--top]].from;
}
}
}
return res;
} int main()
{
int time;
cin >> time;
int st, tp;
int u, v, w;
while (time--)
{
init();
int n, m;
scanf("%d %d", &n, &m);
scanf("%d %d", &st, &tp);
//TS;
for (int i = ; i <= m; i++)
{
scanf("%d %d %d", &u, &v, &w);
addedge(u, v, w * + );
}
//TS;
cout << dinic(st,tp) % << endl;
}
}

最新文章

  1. GitHub入门教程 Hello World for GitHub
  2. Web API 自动生成帮助文档并使用Web API Test Client 测试
  3. chm文件打开空白无内容的解决办法
  4. MyBatis之七:使用generator工具
  5. TortoiseGit 错误信息Aborting commit due to empty commit message.解决
  6. IOS开发-UI学习-UIPageControl(页码控制器)的使用
  7. MySQL学习笔记_3_MySQL创建数据表(中)
  8. 好代码是管出来的——使用GitHub
  9. Django之会议室预预订
  10. 消息队列kafka集群搭建
  11. 深度学习框架caffe/CNTK/Tensorflow/Theano/Torch的对比
  12. google全球地址
  13. LOJ6268拆分数
  14. 亿万第一至二季/全集Billions迅雷下载
  15. APP案例分析-摩拜单车app
  16. docker n2n安装与调试
  17. C/C++中字符串与数字转换
  18. 关于Gulp
  19. SpringXML方式配置bean的集合注入:list,map,properties
  20. Java设计模式の单例模式

热门文章

  1. 课上作业补交 p526/syscalls1
  2. TiDB官方文档
  3. Vue创建局部组件
  4. msyql 计划任务 备份数据库
  5. kaptcha Spring 整合
  6. java调用com组件com4j
  7. Java本周总结1
  8. 2019 java学习 第二周总结
  9. 使用ntpdate 同步 linux的时间
  10. 小白用Mac