Barricade---hdu5889(最短路+网络流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5889
题意:有n个点m条边,每条边的长度相同,我们可以默认为1,构成一个无向图;现在起点为1,终点为n,从起点到终点有很多路可走,现在已知每次走的都是最短路径;
现在要设置障碍,已知在每条边上设置障碍的代价wi, 为了让从起点到达终点一定能看到至少一个障碍,求建立障碍的最小代价;
思路:已知每次都会选择最短路径,所以我们可以把所有的最短路径所包含的边都找出来建立新的网络流图,然后求从起点到达终点的网络流即可;
参考题目hdu3416:http://www.cnblogs.com/zhengguiping--9876/p/5829830.html
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<set>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define N 100005
#define INF 0x3f3f3f3f
typedef long long LL; struct node
{
int v, w, d, Next;
node(int v_=, int w_=, int d_=) : v(v_), w(w_), d(d_){}
}e[N*]; vector<vector<node> >g;///存放原图;
int n, vis[N];
int dist[N];///spfa中的从起点到i的最短距离;
int l[N];///Dinic中的分层 int Head1[N], cnt1;
void Add1(int u, int v, int w)///添加新的边;
{
e[cnt1].v = v;
e[cnt1].w = w;
e[cnt1].Next = Head1[u];
Head1[u] = cnt1++;
} void Init()
{
g.clear();
g.resize(n+);
met(Head1, -);
cnt1 = ;
for(int i=; i<=n; i++)
{
vis[i] = ;
dist[i] = INF;
}
} void spfa()
{
dist[] = ;
vis[] = ;
queue<int>Q;
Q.push();
while(!Q.empty())
{
int p = Q.front();Q.pop();
vis[p] = ;
for(int i=, len=g[p].size(); i<len; i++)
{
int q = g[p][i].v;
if(dist[q] > dist[p]+g[p][i].d)
{
dist[q] = dist[p]+g[p][i].d;
if(!vis[q])
{
vis[q] = ;
Q.push(q);
}
}
}
}
} bool bfs(int s, int End)
{
met(l, );
queue<int>Q;
Q.push(s);
l[s] = ;
while(!Q.empty())
{
int u = Q.front();Q.pop();
if(u == End) return true;
for(int i=Head1[u]; i!=-; i=e[i].Next)
{
int v = e[i].v;
if(!l[v] && e[i].w)
{
l[v] = l[u]+;
Q.push(v);
}
}
}
return false;
} int dfs(int u, int MaxFlow, int End)
{
if(u == End)return MaxFlow; int uflow = ; for(int j=Head1[u]; j!=-; j=e[j].Next)
{
int v = e[j].v;
if(l[v]==l[u]+ && e[j].w)
{
int flow = min(e[j].w, MaxFlow-uflow);
flow = dfs(v, flow, End);
e[j].w -= flow;
e[j^].w += flow;
uflow += flow;
if(uflow == MaxFlow)
break;
}
}
if(uflow == )
l[u] = ;
return uflow;
} int Dinic()
{
int MaxFlow = ;
while(bfs(, n))
MaxFlow += dfs(, INF, n);
return MaxFlow;
} int main()
{
int T, m, u, w, v;
scanf("%d", &T);
while(T--)
{
scanf("%d %d", &n, &m); Init(); for(int i=; i<=m; i++)
{
scanf("%d %d %d", &u, &v, &w);
g[u].push_back(node(v, w, ));
g[v].push_back(node(u, w, ));
} spfa();///更新dist for(int i=; i<=n; i++)
{
for(int j=, len=g[i].size(); j<len; j++)
{
int p = g[i][j].v;
if(dist[p] == dist[i] + g[i][j].d)///说明从点i到达点p的路在最短路径上;
{
Add1(i, p, g[i][j].w);///建立新图;
Add1(p, i, );///注意这里是0;
}
}
} int ans = Dinic();///求最大流即可; printf("%d\n", ans);
}
return ;
}
Barricade---hdu5889(最短路+网络流)的更多相关文章
- HDU 5889 (最短路+网络流)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- HDU5889 Barricade(最短路)(网络流)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- HDU 5889 Barricade(最短路+最小割水题)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- SGU 185 Two shortest ★(最短路+网络流)
[题意]给出一个图,求 1 -> n的2条 没有重边的最短路. 真◆神题--卡内存卡得我一脸血= =-- [思路] 一开始我的想法是两遍Dijkstra做一次删一次边不就行了么你们还又Dijks ...
- hdu3416 Marriage Match IV(最短路+网络流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3416 题意: 给出含n个点.m条有向边的图,每条边只能走一次,给出起点和终点,求起点到终点的最短路径有 ...
- bzoj 3931: [CQOI2015]网络吞吐量 -- 最短路+网络流
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MB Description 路由是指通过计算机网络把信息从源地址传输到目的地址 ...
- hdu-3416(最短路+网络流)
题意:给你一个有向权图,问你从S到E有几条最短路,每条边直走一次的情况下: 解题思路:每条边直走一次,最大流边权为1,因为要算几条最短路,那么能得到最短路的路径标记下,然后跑最大流 代码: #incl ...
- hdu-5889-最短路+网络流/最小割
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- HDU 5889 Barricade(最短路+最小割)
http://acm.hdu.edu.cn/showproblem.php?pid=5889 题意: 给出一个图,帝国将军位于1处,敌军位于n处,敌军会选择最短路到达1点.现在帝国将军要在路径上放置障 ...
随机推荐
- OpenCV IplImage FlyCapture2 Image Conversion 两种图像类的相互转化
OpenCV的IplImag和 FlyCapture2 的 Image是两种常见的图片格式,在实际的应用中,我们通常要混合使用OpenCV和FlyCapture2这两个SDK,所以这两种图片格式之间的 ...
- 《GK101任意波发生器》升级固件发布(版本:1.0.2build306)
一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build306 编译日期:2014-09-24 ====================================== 二. ...
- 【iCore、iCore2 双核心板】EPCS 实验(SPI Flash)(基于Verilog语言)
_____________________________________ 深入交流QQ群: A: 204255896(1000人超级群,可加入) B: 165201798(500人超级群,满员) C ...
- OpenCV学习笔记——多种Smooth平滑处理
opencv库提供了好几种模糊平滑Smooth操作的类型作为cvSmooth的参数传入,从而达到不同的平滑效果,另外复习了一下如何复制一份图像和重新调整图像大小. 调整图像大小目前是按照一下步骤进行: ...
- The resource could not be loaded because the App Transport Security policy requires the use of a secure connection
xmpp 项目中遇到的问题,用苹果的通信API 写一个PUT 方法,向服务器上传一张图片.遇到如题问题. Plist 文件没有NSAppTransportSecurity属性 Dic,添加该属性,再添 ...
- WEB项目web.xml文件中classpath: 跟classpath*:使用的区别
引用一篇很不错的文章:http://blog.csdn.net/wxwzy738/article/details/16983935 首先 classpath是指 WEB-INF文件夹下的classes ...
- eclipse怎么显示代码行数
熟悉java开发的朋友们肯定有这样的经验,那就是在用eclipse进行java开发的时候,没有显示代码的行数,这并不利于我们进行程序的调试.今天,小编就来教大家eclipse怎么显示代码行数 ...
- HDR Defered Shading (using MRT)
http://http.download.nvidia.com/developer/SDK/Individual_Samples/DEMOS/Direct3D9/DeferredShading.zip ...
- Web 在线文件管理器学习笔记与总结(19)上传文件
dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...
- placeholder属性实现text标签默认值提示用户
<input type="text" class="searchTxt" id=this.id+"-searchTxt" placeh ...