HDU 5889 (最短路+网络流)
Barricade
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1117 Accepted Submission(s): 340
For each test case, in the first line there are two integers N(N≤1000) and M(M≤10000).
The i-the line of the next M lines describes the i-th edge with three integers u,v and w where 0≤w≤1000 denoting an edge between u and v of barricade cost w.
4 4
1 2 1
2 4 2
3 1 3
4 3 4
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int maxn = ;
const int inf = 0x3f3f3f3f;
int n,m;
int g[maxn][maxn];
int vis[maxn];
int dis[maxn];
struct edge
{
int to;
int cap;
int rev;
};
vector<edge> gg[maxn];
int level[maxn];
int it[maxn];
void add(int from,int to,int cap)
{
edge cur;
cur.to = to;
cur.cap = cap;
cur.rev = gg[to].size();
gg[from].push_back(cur);
cur.to = from;
cur.cap = ;
cur.rev = gg[from].size()-;
gg[to].push_back(cur);
} void bfs(int s)
{
memset(level,-,sizeof(level));
queue<int> q;
level[s] = ;
q.push(s);
while(!q.empty())
{
int v = q.front(); q.pop();
for(int i=;i<gg[v].size();i++)
{
edge &e = gg[v][i];
if(e.cap>&&level[e.to]<)
{
level[e.to] = level[v]+;
q.push(e.to);
}
}
}
}
int dfs(int v,int t,int f)
{
if(v==t) return f;
for(int &i=it[v];i<gg[v].size();i++)
{
edge &e = gg[v][i];
if(e.cap>&&level[v]<level[e.to])
{
int d = dfs(e.to,t,min(f,e.cap));
if(d>)
{
e.cap -= d;
gg[e.to][e.rev].cap += d;
return d;
}
}
}
return ;
}
int max_flow(int s,int t)
{
int flow = ;
for(;;)
{
bfs(s);
if(level[t]<) return flow;
memset(it,,sizeof(it));
int f;
while((f=dfs(s,t,inf))>) flow += f;
}
}
bool bfs1()
{
queue<int> q;
memset(vis,,sizeof(vis));
memset(dis,inf,sizeof(dis));
vis[] = ;
dis[] = ;
q.push();
while(!q.empty())
{
int cur = q.front();q.pop();
if(cur==n) return true;
for(int i=;i<=n;i++)
{
if(cur==i) continue;
if(!vis[i]&&g[cur][i]!=-)
{
vis[i] = ;
dis[i] = dis[cur]+;
q.push(i);
}
}
}
return false;
}
void bfs2()
{
queue<int> q;
memset(vis,,sizeof(vis));
vis[n] = ;
q.push(n);
while(!q.empty())
{
int cur = q.front();q.pop();
for(int i=;i<=n;i++)
{
if(cur==i) continue;
if(g[cur][i]==-) continue;
if(dis[i]+==dis[cur])
{
add(i,cur,g[i][cur]);
if(!vis[i])
{
vis[i] = ;
q.push(i);
}
}
}
}
}
int main()
{
int T;cin>>T;
while(T--)
{
scanf("%d %d",&n,&m);
int u,v,w;
memset(g,-,sizeof(g));
for(int i=;i<maxn;i++) gg[i].clear();
for(int i=;i<=m;i++)
{
scanf("%d %d %d",&u,&v,&w);
g[u][v] = w;
g[v][u] = w;
}
int ans = ;
bfs1();
bfs2();
ans = max_flow(,n);
printf("%d\n",ans);
}
return ;
}
HDU 5889 (最短路+网络流)的更多相关文章
- HDU 5889 Barricade(最短路+最小割水题)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 5521 最短路
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 3605 Escape (网络流,最大流,位运算压缩)
HDU 3605 Escape (网络流,最大流,位运算压缩) Description 2012 If this is the end of the world how to do? I do not ...
- HDU 4289 Control (网络流,最大流)
HDU 4289 Control (网络流,最大流) Description You, the head of Department of Security, recently received a ...
- HDU 4292 Food (网络流,最大流)
HDU 4292 Food (网络流,最大流) Description You, a part-time dining service worker in your college's dining ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
随机推荐
- vs中的各种快捷键
1. VS注释与取消注释快捷键 CTRL + K , CTRL + C(注释) CTRL + K , CTRL + U(取消注释)
- 观后感-MySQL索引类型 btree索引和hash索引的区别
http://www.cnblogs.com/osfipin/p/4943229.html.http://www.2cto.com/database/201411/351106.html-文章地址 首 ...
- ASP.NET之.NET FrameWork框架
.NET FrameWork框架 是一套应用程序开发框架,主要目的提供一个开发模型. 主要的两个组件: 公共语言运行时(Common Language Runtime)(CLR): 提供内存管理.线 ...
- 把ResultSet对象转变成List对象
private static List<Map<String, Object>> convertRS2List(ResultSet rs) throws SQLExceptio ...
- Tsung记录
1.提高Tsung登录用户数 ulimit -n (65530)修改系统最大连接数,Tsung压力机和服务器都需要更改
- tomcat的几种配置方式(常用)
https://www.baidu.com url www.baidu.com 主机名 baidu.com 域名 第一种 放在webapp目录下 也可以放在ROOT 根目录下 访问路径 IP:端口 ...
- Loadrunner中参数和变量的使用
//字符串复制strcpy(str,"Hello ") ; //字符串连接strcat(str,"World !");lr_message("str: ...
- html+javascript实现可拖动可提交的弹出层对话框效果
本文为大家介绍下使用html+javascript实现可拖动弹出层.对话框.可提交,具体代码如下,感兴趣的朋友可以参考下,希望对大家有所帮助 <!DOCTYPE HTML PUBLIC &quo ...
- raise()函数
kill和raise函数用来发送信号, 区别在于: kill把信号发送给进程或进程组. kill(pid_t pid, int signo) raise把信号发送给进程自己,相当于 raise(ing ...
- LeetCode OJ 83. Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...