A - ACM Computer Factory(网络流)
题目链接:https://cn.vjudge.net/contest/68128#problem/A
反思:注意拆点,否则的话节点就没用了,还有注意源点和汇点的赋值。
AC代码:
#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<stack>
#include<queue>
#include<stdio.h>
#include<algorithm>
using namespace std;
# define inf 0x3f3f3f3f
# define maxn 100+10
# define ll long long
int p,n;
int ori[maxn][maxn],nex[maxn][maxn];
int pre[maxn],vis[maxn];
int u[maxn],v[maxn],w[maxn];
struct node
{
int cost;
int in[maxn];
int out[maxn];
} a[maxn];
void init()
{
memset(ori,0,sizeof(ori));
memset(nex,0,sizeof(nex));
a[1].cost=inf;
for(int i=1; i<=p; i++)
{
a[1].in[i]=0;
a[1].out[i]=0;
a[n+2].in[i]=1;
a[n+2].out[i]=1;
}
a[n+2].cost=inf;
}
bool judge(int t1,int t2)
{
for(int i=1; i<=p; i++)
{
if(a[t1].out[i]!=a[t2].in[i]&&a[t2].in[i]!=2)return false;//多也不行,少也不行。
}
return true;
}
bool bfs(int st,int ed)
{
queue<int>q;
memset(vis,0,sizeof(vis));
vis[st]=1;
q.push(st);
pre[st]=st;
while(!q.empty())
{
int top=q.front();
q.pop();
for(int i=1; i<=2*n; i++)
{
if(vis[i]==0&&nex[top][i])
{
vis[i]=1;
pre[i]=top;
if(i==ed)return true;
q.push(i);
}
}
}
return false;
}
int EK(int st,int ed)
{
int ans=0;
while(bfs(st,ed))
{
int minn=inf ;
for(int i=ed; i!=st; i=pre[i])
{
minn=min(minn,nex[pre[i]][i]);
}
for(int i=ed; i!=st; i=pre[i])
{
nex[pre[i]][i]-=minn;
nex[i][pre[i]]+=minn;
}
ans+=minn;
}
return ans;
}
int main()
{
while(~scanf("%d%d",&p,&n))
{
init();
for(int i=2; i<=n+1; i++)//从2开始是为了把1当做源点
{
scanf("%d",&a[i].cost);
for(int j=1; j<=p; j++)
{
scanf("%d",&a[i].in[j]);
}
for(int j=1; j<=p; j++)
{
scanf("%d",&a[i].out[j]);
}
}
n+=2;//和原来相比加入了源点和汇点
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(i==j)
{
ori[i][j+n]=nex[i][j+n]=a[i].cost;
}
else if(i!=j&&judge(i,j))
{
ori[i+n][j]=nex[i+n][j]=a[i].cost;
}
}
}
int ans=EK(1,n*2);
int num=0;
for(int i=2; i<n; i++)
{
for(int j=2; j<n; j++)
{
if(ori[i+n][j]>nex[i+n][j])//如果拆点后当前流的流量变小了,说明这条路上有流量。
{
u[++num]=i;
v[num]=j;
w[num]=ori[i+n][j]-nex[i+n][j];
}
}
}
printf("%d %d\n",ans,num);
for(int i=1; i<=num; i++)
{
printf("%d %d %d\n",u[i]-1,v[i]-1,w[i]);
}
}
return 0;
}
A - ACM Computer Factory(网络流)的更多相关文章
- POJ 3436:ACM Computer Factory 网络流
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6247 Accepted: 2 ...
- POJ - 3436 ACM Computer Factory 网络流
POJ-3436:http://poj.org/problem?id=3436 题意 组配计算机,每个机器的能力为x,只能处理一定条件的计算机,能输出特定的计算机配置.进去的要求有1,进来的计算机这个 ...
- POJ 3436 ACM Computer Factory (网络流,最大流)
POJ 3436 ACM Computer Factory (网络流,最大流) Description As you know, all the computers used for ACM cont ...
- POJ-3436 ACM Computer Factory(网络流EK)
As you know, all the computers used for ACM contests must be identical, so the participants compete ...
- A - ACM Computer Factory POJ - 3436 网络流
A - ACM Computer Factory POJ - 3436 As you know, all the computers used for ACM contests must be ide ...
- POJ3436 ACM Computer Factory(最大流/Dinic)题解
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8944 Accepted: 3 ...
- POJ 3464 ACM Computer Factory
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4829 Accepted: 1641 ...
- ACM Computer Factory(dinic)
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5596 Accepted: 1 ...
- ACM Computer Factory
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6104 Accepted: 2113 ...
随机推荐
- 3 vue-router 的默认hash 改mode:history去除#号 传参
npm install vue-router --save //安装 传参
- rocketmq 主机负载异常飙高问题的解决
最近在部署rocketmq到物理机时, 发现并解决了一个主机Load异常飙高的问题, 觉得有必要记录一下. 我们采用了rocketmq(https://github.com/alibaba/Rocke ...
- poj 3311(状态压缩DP)
poj 3311(状态压缩DP) 题意:一个人送披萨从原点出发,每次不超过10个地方,每个地方可以重复走,给出这些地方之间的时间,求送完披萨回到原点的最小时间. 解析:类似TSP问题,但是每个点可以 ...
- Caffe使用step by step:r-cnn目标检测代码
深度学习算法火起来之后,基于深度学习各种模型都如雨后春笋一般在各个领域广泛应用. 由于想把深度学习算法应用在在视频目标检测方向,得到一个较好的结果.由于视频数据的复杂性,因此使用深度学习算法在视频中的 ...
- Python2X和Python3X的区别
python2X:源码重复不规范python3X:整合源码,更清晰简单优美. python2X:默认的编码是ascii (解决办法为第一行添加 : #-*- encoding:ut ...
- 半夜思考,为什么 String 具有不变性
学习 Java 的数据类型时,特殊关照了 String 类型,具有不变性. 当时没有深入思考为什么 String 有不变性.而且我只碰到了 String 才有不变性.Java这样设计的缘由何在. 突然 ...
- angular 调用element的 onfocus onkeydown onblur等事件
项目里要实现一个input验证通过就切换到下一个input的功能 当然用jq dom操作很简单 ,大家都懂,现在用 angular,mvc 数据模型控制分离,不想再dom操作怎么办 以下方法 < ...
- struts 跳转的四种常用类型
1 dispatcher 默认的跳转类型 地址栏不变 2.redirect 跳转后地址会变化 3 chain 跳转到一个动作类 地址栏不会变 4 redirectAction 跳转到一个动作类 地址栏 ...
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题
如果线程在等待时接到通知,但线程等待的条件还不满足,此时,线程接到的就是早期通知,如果条件满足的时间很短,但很快又改变了,而变得不再满足,这时也将发生早期通知.这种现象听起来很奇怪,下面通过一个示例程 ...
- line search中的重要定理 - 梯度与方向的点积为零
转载请注明出处:http://www.codelast.com/ 对精确的line search(线搜索),有一个重要的定理: ∇f(xk+αkdk)Tdk=0 这个定理表明,当前点在dk方向上移动到 ...