poj1459多源多汇最大流问题
/*基本构图题,多源多汇,添加一个源点和一个汇点,所有源点都来自这个源点,同理,所有汇点
都汇于这个汇点,dinic第二战,本来应该1A的,犯了一个低级错误!while(scanf("%d))要加“~”啊!
SB了,记住这个教训!此次顺带学习了scanf的又一读入,忽略空格和已有符号,不错,并且更加了解了
dinic算法(为什么要添加反向弧?反向弧其实是提供悔棋的机会(每次回走相当于原来的流量又回来了(直接把容量看成剩余的流量),二,这题本身有反向弧,直接叠加即可,若走原图反向弧,相当于走这条路,走添加的反向弧,相当于反悔))。
但是为什么我的dinic要900MS啊!*/
未1A原因:while(scanf...)!!~~~~~!!!
#include<iostream> //900MS
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int n,np,nc,m;
const int inf=0x3f3f3f3f;
struct edge
{
int to,flow,pre;
};
edge e[24000];int head[120];
int vis[120],level[120];
bool bfs()
{
for(int i=0;i<=n+3;i++)
vis[i]=level[i]=0;
queue<int>q;
q.push(0);vis[0]=1;
while(!q.empty())
{
int cur=q.front();
q.pop();
for(int i=head[cur];i!=-1;i=e[i].pre)
{
int v=e[i].to;
if(!vis[v]&&e[i].flow>0)
{
vis[v]=1;
level[v]=level[cur]+1;
if(v==n+1)return 1; //优化之一
q.push(v);
}
}
}
return vis[n+1];
}
int dfs(int u,int minf) //minf 是目前为止残量
{
if(minf==0||u==n+1){return minf;}
int nowsumflow=0,zhihouflow;
for(int i=head[u];i!=-1&&minf;i=e[i].pre)
{
int v=e[i].to;int temp=e[i].flow;
if(level[v]==level[u]+1&&temp>0)
{
zhihouflow=dfs(v,minf<temp?minf:temp);
if(zhihouflow==0)continue;
e[i].flow-=zhihouflow;
e[i^1].flow+=zhihouflow;
nowsumflow+=zhihouflow;
minf-=zhihouflow;
}
}
return nowsumflow;
}
int main()
{
while(~scanf("%d%d%d%d",&n,&np,&nc,&m)) //没有加~!跪了N久
{
int s,l,f;int i,j;
for(int ii=0;ii<=n+4;ii++)
head[ii]=-1;
for(i =0;i<2*m;i++)
{
scanf(" (%d,%d)%d",&s,&l,&f);
if(s==l){i++;continue;}
e[i].to=l+1;e[i].pre=head[s+1];
head[s+1]=i;e[i].flow=f;
i++;
e[i].to=s+1;e[i].pre=head[l+1];
head[l+1]=i;e[i].flow=0;
}
for(j=i;j<2*np+i;j++)
{
scanf(" (%d)%d",&s,&f);
e[j].to=s+1;e[j].pre=head[0];
head[0]=j;e[j].flow=f;
j++;
e[j].to=0;e[j].pre=head[s+1];
head[s+1]=j;e[j].flow=0;
}
for(int k=j;k<2*nc+j;k++)
{
scanf(" (%d)%d",&s,&f);
e[k].to=n+1;e[k].pre=head[s+1];
head[s+1]=k;e[k].flow=f;
k++;
e[k].to=s+1;e[k].pre=head[n+1];
head[n+1]=k;e[k].flow=0;
}
long long sumcom=0;
while(bfs())
{
sumcom+=dfs(0,inf);
}
printf("%lld\n",sumcom);
}
return 0;
}
poj1459多源多汇最大流问题的更多相关文章
- poj1459 Power Network (多源多汇最大流)
Description A power network consists of nodes (power stations, consumers and dispatchers) connected ...
- [poj1459]Power Network(多源多汇最大流)
题目大意:一个网络,一共$n$个节点,$m$条边,$np$个发电站,$nc$个用户,$n-np-nc$个调度器,每条边有一个容量,每个发电站有一个最大负载,每一个用户也有一个最大接受量.问最多能供给多 ...
- hdoj 2066 一个人的旅行 【多源多汇最短路】
题目:hdoj 2066 一个人的旅行 方法:缩点 + 最短路 分析:看了大神的一篇博客,讲冗余压缩的,然后就想找一个多源最短路练练手. 这个题目就是典型的多源多汇最短路 方法:把全部的源点压缩成一个 ...
- Vijos 1006 晴天小猪历险记之Hill 单源单汇最短路
背景 在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结-- 不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物.所以晴天小猪自告奋勇 ...
- 2018.07.06 POJ 1459 Power Network(多源多汇最大流)
Power Network Time Limit: 2000MS Memory Limit: 32768K Description A power network consists of nodes ...
- poj2112 二分+floyd+多源多汇最大流
/*此题不错,大致题意:c头牛去k个机器处喝奶,每个喝奶处最多容纳M头牛,求所有牛中走的最长路的 那头牛,使该最长路最小.思路:最大最小问题,第一灵感:二分答案check之.对于使最长路最短, 用fo ...
- poj-3436.ACM Computer Factory(最大流 + 多源多汇 + 结点容量 + 路径打印 + 流量统计)
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10940 Accepted: ...
- BZOJ-1066 蜥蜴 最大流+拆点+超级源超级汇
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2582 Solved: 1272 [Submit][Status] ...
- POJ 2391 多源多汇拆点最大流 +flody+二分答案
题意:在一图中,每个点有俩个属性:现在牛的数量和雨棚大小(下雨时能容纳牛的数量),每个点之间有距离, 给出牛(速度一样)在顶点之间移动所需时间,问最少时间内所有牛都能避雨. 模型分析:多源点去多汇点( ...
随机推荐
- [Python學習筆記] 使用 selenium 抓取網頁並且雙擊滑鼠 (double click)
一開始使用的時候 看官方文件 以為使用 double_click()即可 但後來出現錯誤 AttributeError: 'WebElement' object has no attribute 'd ...
- H3C S5024P交换机 vlan实验
H3C S5024P交换机第二次vlan实验 实验1 与交换机端口G0/1和G0/2相连的PC1与PC2属于VLAN 1,与G0/3和G0/4相连的PC3和PC4属于VLAN 2,PC1.PC2.PC ...
- Window.Event.KeyCode的含义
Window.Event.KeyCode=13的含义(转载) 2011-04-16 09:41:18| 分类: html | 标签:keycode event realkey var do ...
- Idea maven项目不能新建package和class的解决方法
如下图,用IDEA新建的maven项目不能新建package,class等 原因是:这里的java文件夹是普通文件夹,要设置为Sources Root.(如下图) 就可以了(见下图)
- Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1. 接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2. 利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.j ...
- 自己写的画loss曲线代码
import matplotlib.pyplot as plt iteration = [] loss = [] with open('/home/sensetime/log.txt','r') as ...
- COM(Component Object Model)接口定义
a COM interface is defined using a language called Interface Definition Language (IDL). The IDL file ...
- android 近百个源码项目【转】
http://www.cnblogs.com/helloandroid/articles/2385358.html Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多 ...
- JavaScript中通过原型添加方法,解决数据共享问题,节省内存空间
涉及知识点:(1)原型的引入(2)构造函数.原型对象和实例对象之间的关系(3)__proto__和prototype的理解 直接举例:在自定义构造函数创建对象时,因为创建的对象使用的不是同一个方法,所 ...
- 【简●解】[HAOI2007] 理想的正方形
[简●解][HAOI2007] 理想的正方形 可恶的\(DP\). [题目大意] 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值 ...