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 ...
随机推荐
- 在block函数中规避错误信息 "capturing self strongly in this block is likely to lead to a retain cycle”
以形如 _fontValueChangedBlock = ^(){ [self.fontSmallButton addTarget:self action:@selector(btnFontSmall ...
- drupal7 上传文件中文乱码
drupal7自带有file模块,可以上传文件. 但是存在问题:如果上传的文件名称是中文,存储在文件下面的文件名称是乱码的,解决办法如下:参考出处 includes/file.inc中,修改两处代码, ...
- java使用url和tns两种方式连接数据库执行存储过程
1.url方式(连接数据库并执行一个查询): public static void main(String[] args) throws ClassNotFoundException, SQLExce ...
- TextView赋值int型,并显示
textview赋值int型采用text.setText(FPS+""); FPS为int型变量 或者在thread线程需要在主Activity中显示文字,可以调用: runOnU ...
- 计算机网络分层(OSI七层、 TCP/IP四层)
- HDU - 5547 Sudoku(数独搜索)
Description Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game himself ...
- 《Windows驱动开发技术详解》之Windows内存管理
虚拟内存地址 Windows所有的程序(Ring0和Ring3层)可以操作的都是虚拟内存.有一部分单元会和物理内存对应起来,但并非一一对应,多个虚拟内存页可以映射同一个物理内存页.还有一部分单元会被映 ...
- 50个很棒的Python模块
50个很棒的Python模块 我很喜欢Python,Python具有强大的扩展能力,我列出了50个很棒的Python模块,包含几乎所有的需要:比如Databases,GUIs,Images, Soun ...
- LINUX修改IP地址
以前都是使用自动IP动态分配获取IP的,虽然每次获得的ip都是相同的,但我还是决定自己设置一个IP.输入命令:[root@localhost ~]# ifconfig eth0 219.246.177 ...
- hdu_2446_Shell Pyramid(数学,二分)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2446 题意:题面很大,有用的就那么几句,意思就是用自然数来堆它画的那个金字塔,比如第一个金字塔的第一个 ...