Barricade

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1117    Accepted Submission(s): 340

Problem Description
The empire is under attack again. The general of empire is planning to defend his castle. The land can be seen as N towns and M roads, and each road has the same length and connects two towns. The town numbered 1 is where general's castle is located, and the town numbered N is where the enemies are staying. The general supposes that the enemies would choose a shortest path. He knows his army is not ready to fight and he needs more time. Consequently he decides to put some barricades on some roads to slow down his enemies. Now, he asks you to find a way to set these barricades to make sure the enemies would meet at least one of them. Moreover, the barricade on the i-th road requires wi units of wood. Because of lacking resources, you need to use as less wood as possible.
 
Input
The first line of input contains an integer t, then t test cases follow.
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.
 
Output
For each test cases, output the minimum wood cost.
 
Sample Input
1
4 4
1 2 1
2 4 2
3 1 3
4 3 4
 
Sample Output
4
最短路+网络流。
先一遍bfs找到最短路,再一次bfs找到最短路上的点,通过dis[i]+1 = dis[u]来找,然后跑一遍Dinic。
 #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 (最短路+网络流)的更多相关文章

  1. HDU 5889 Barricade(最短路+最小割水题)

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  2. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  3. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. hdu 5521 最短路

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  5. HDU 3605 Escape (网络流,最大流,位运算压缩)

    HDU 3605 Escape (网络流,最大流,位运算压缩) Description 2012 If this is the end of the world how to do? I do not ...

  6. HDU 4289 Control (网络流,最大流)

    HDU 4289 Control (网络流,最大流) Description You, the head of Department of Security, recently received a ...

  7. HDU 4292 Food (网络流,最大流)

    HDU 4292 Food (网络流,最大流) Description You, a part-time dining service worker in your college's dining ...

  8. HDU - 2544最短路 (dijkstra算法)

    HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...

  9. 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 ...

随机推荐

  1. Python 学习笔记4

    我是一个艺术家. 今天继续学习python啊.争取看到python流程控制.

  2. 测试sql性能方法

    SET STATISTICS io ON         SET STATISTICS time ON         go          ---你要测试的sql语句          selec ...

  3. Oracle数据库插入数据出错:ORA-06550

    wpf应用调用oracle的存储过程,出错“ORA-06550:参数个数或参数类型出错”,如下图: 反复检查,存储过程的参数个数和参数类型都没错,觉得非常蹊跷.最后终于解决, 原因是当参数的值为nul ...

  4. GDB: advanced usages

    Sometimes running program in Unix will fail without any debugging info or warnings because of the la ...

  5. 关于Linode、Digitalocean、Vultr三款美国VPS服务商的用户体验

    曾几何时,虽然我们在海外VPS服务商中也可以看到各种大大小小的商家,但是真正能让Linode这样高富帅有竞争力的还真不多,这不当初在Linode商家512MB内存方案卖20美元一个月的时候,还是有很多 ...

  6. ios随机数

    ios 随机数生成 字数612 阅读3037 评论1 喜欢15 最近一直使用随机数,为了以后方便查阅,总结一下: 在C中提供了rand().srand().random().arc4random()几 ...

  7. 类型“GridView”的控件必须放在具有 runat=server 的窗体标记内?

    Response.AddHeader("content-disposition", "attachment;filename=CRM.xls") Respons ...

  8. RESTful架构3--开发实战

    转自:REST服务开发实战 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web ...

  9. vertor容器

    头文件#include<vector> 1.创建vector对象 1.不指定容器大小  vector <int> v; 2.指定容器大小 vector <double&g ...

  10. TOMCAT 优化设置

    增加JVM堆内存大小修复JRE内存泄漏线程池设置压缩数据库性能调优Tomcat本地库 第1步 – 提高JVM栈内存Increase JVM heap memory 你使用过tomcat的话,简单的说就 ...