1,起点:0,终点:n
1到n-1设置n-1的狙击点,给定边和每个点至少需要的狙击兵数量.
求:成功阻击最少需要多少个狙击手?
2,解答:
最大流最小割定理.
这里需要将一个点拆成一条边.
举例:
相应的生成图为:
3,实例代码:
#include <iostream>
#include <queue>
using namespace std;
const int maxN=105;
const int inf=0xffff;
bool g[maxN][maxN];//关系数组,初始图
int edge[maxN][maxN];//生成图的邻接权矩阵
int n,m;//顶点数和边数
int cnt;//测试数目
int ans;
bool visited[maxN];
int father[maxN];
void Ford_Fulkerson()
{
while(1)
{
//一次大循环,找到一条可能的增广路径
queue <int> q;
memset(visited, 0, sizeof(visited));
memset(father, -1, sizeof(father));
int now;
visited[0] = true;
q.push(0);
while(!q.empty())//广度优先
{
now = q.front();
q.pop();
if(now == n-1) break;
for(int i=0; i<n+n-2; i++) //生成图定点数
{
//每次父亲节点都要更新,权值减为0的边就不算了.
if(edge[now][i] && !visited[i])
{
father[i] = now;
visited[i] = true;
q.push(i);
}
}
}
//可能的增广路不存在了
if(!visited[n-1]) break; //终点标号
int u, min = inf;
for(u=n-1; u; u=father[u])//找出权值最小的边
{
if(edge[father[u]][u] < min)
min = edge[father[u]][u];
}
//减去最小权值
for(u=n-1; u; u=father[u])
{
//前向弧减去
edge[father[u]][u] -= min;
//后向弧加上
//存在圆环,这句话关键
edge[u][father[u]] += min;
}
//当前增广路径增加的流
ans+=min;
}
}
int main()
{
freopen("5.3.in","r",stdin);
cin>>cnt;
int s,e,temp;
while(cnt--)
{
ans=0;
memset(g,0,sizeof(g));
memset(edge,0,sizeof(edge));
cin>>n>>m;
n+=1;
for(int i=1;i<=n-2;i++)
{
int num;//狙击兵个数
cin>>num;
//将点分成一条边
edge[i][i+n-1]=num;
}
for(int i=0;i<m;i++)
{
cin>>s>>e;
if(s>e)
{
temp=s;
s=e;
e=temp;
}
g[s][e]=true;
if(s!=0&&e!=n-1) //不含有起点或终点,设定为双向边
g[e][s]=true;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(g[i][j])
{
if(i==0) edge[i][j]=inf;
if(i!=0) edge[i+n-1][j]=inf;
}
}
Ford_Fulkerson();
cout<<ans<<endl;
}
return 0;
}
- 大小: 679 Bytes
- 大小: 1.1 KB
分享到:
相关推荐
《国际大学生程序设计竞赛例题解.三:图论、动态规划算法、综合题专集》是一本专门针对编程竞赛中的重要算法与问题解决策略的书籍。它涵盖了图论、动态规划以及综合题型,这些都是在竞赛中经常遇到并且至关重要的...
本系列丛书包括《ACM国际大学生程序设计竞赛:知识与入门》、《ACM国际大学生程序设计竞赛:算法与实现》、《ACM国际大学生程序设计竞赛:题目与解读》、《ACM国际大学生程序设计竞赛:比赛与思考》等4册,其中《ACM...
国际大学生程序设计竞赛例题解(六) 广东省大学生程序设计竞赛例题解析
### 国际大学生程序设计竞赛教程知识点概览 #### 一、国际大学生程序设计竞赛(ACM/ICPC)概述 - **主办单位**: ACM/ICPC由国际计算机学会(Association for Computer Machinery, ACM)主办,该学会是全球历史最...
第二本:国际大学生程序设计竞赛例题解 2 广东省大学生程序设计竞赛试题 2003-2005年 第三本:国际大学生程序设计竞赛例题解 3 图论·动态规划算法·综合题专集 第四本:国际大学生程序设计竞赛例题解 4 广东省...
此资源压缩包分为两卷,此卷为part1。 《ACM国际大学生程序设计竞赛:题目与解读》讲述了ACM国际大学生程序设计竞赛(ACM—...《ACM国际大学生程序设计竞赛:题目与解读》为各类算法配备经典例题及题库,并提供解题思路。
本系列丛书包括《acm国际大学生程序设计竞赛:知识与入门》、《acm国际大学生程序设计竞赛:算法与实现》、《acm国际大学生程序设计竞赛:题目与解读》、《acm国际大学生程序设计竞赛:比赛与思考》等4册,其中《acm...
本系列丛书包括《acm国际大学生程序设计竞赛:知识与入门》、《acm国际大学生程序设计竞赛:算法与实现》、《acm国际大学生程序设计竞赛:题目与解读》、《acm国际大学生程序设计竞赛:比赛与思考》等4册,其中《acm...
本系列丛书包括《acm国际大学生程序设计竞赛:知识与入门》、《acm国际大学生程序设计竞赛:算法与实现》、《acm国际大学生程序设计竞赛:题目与解读》、《acm国际大学生程序设计竞赛:比赛与思考》等4册,其中《acm...
《国际大学生程序设计竞赛例题解》是针对ACM(国际大学生程序设计竞赛)和信息学竞赛精心编纂的一份参考资料,尤其适用于广东省大学生程序设计竞赛的参赛者。该资源包含了一系列精选的竞赛题目,旨在帮助参赛者提升...
这个压缩包“国际大学生程序设计竞赛例题解二”显然是一个关于该竞赛的解题集,包含了解决过去竞赛题目的一些策略和方法。 在ICPC中,参赛队伍需要解决一系列复杂的算法问题,在限时内提交正确答案。这些题目通常...
- **国际大学生程序设计竞赛例题解系列**(郭嵩山):提供多种题型的解决方案,帮助学生拓宽解题思路。 - 在线编程平台如ZJU Online Judge、POJ、Codeforces等,提供了丰富的题库供学生练习。 #### 五、训练规范与...
本系列丛书包括《acm国际大学生程序设计竞赛:知识与入门》、《acm国际大学生程序设计竞赛:算法与实现》、《acm国际大学生程序设计竞赛:题目与解读》、《acm国际大学生程序设计竞赛:比赛与思考》等4册,其中《acm...
算法参考资料国际大学生程序设计竞赛例题解数论、计算几何、搜索算法专集
### 国际大学生程序设计竞赛辅导教程知识点概览 #### 一、国际大学生程序设计竞赛简介 - **背景与意义**: - **主办方**:由国际计算机领域历史悠久且颇具权威性的组织——ACM学会(Association for Computer ...
本系列丛书包括《acm国际大学生程序设计竞赛:知识与入门》、《acm国际大学生程序设计竞赛:算法与实现》、《acm国际大学生程序设计竞赛:题目与解读》、《acm国际大学生程序设计竞赛:比赛与思考》等4册,其中《acm...
本系列丛书包括《acm国际大学生程序设计竞赛:知识与入门》、《acm国际大学生程序设计竞赛:算法与实现》、《acm国际大学生程序设计竞赛:题目与解读》、《acm国际大学生程序设计竞赛:比赛与思考》等4册,其中《acm...
国际大学生程序设计竞赛(ICPC,International Collegiate Programming Contest)是一项全球性的计算机编程赛事,旨在提升大学生的算法设计、问题解决以及团队合作能力。本压缩包“竞赛例题解(六)光盘”包含了该赛事...
本压缩包“国际大学生程序设计竞赛例题解”包含了图论、动态规划以及综合题目的例题解析,是参赛者或对算法感兴趣的学者宝贵的参考资料。 首先,我们来探讨图论这一领域。图论是数学的一个分支,主要研究点(顶点)...
2005年》一书,主要为那些准备参加国际大学生程序设计竞赛(ICPC)以及广东省大学生程序设计竞赛的读者提供了过去竞赛中的一些例题以及解题方法。书中不仅包括了国际赛题,还特别针对广东省的比赛提供了解题资源,...