最小费用最大流问题
orzorz.....我实在太弱啦!
今天问txl神犇我写的这算什么 被教育了一番只背板子不理解算法...
于是决定跪回去老实啃定义....
不过在那之前还是先把劳动成果放出来吧x
照理是模板题:
改了一改某位神犇的代码 看上去还是挺舒服的x
#pragma GCC optimize("O2")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<limits.h>
#include<ctime>
#define N 100001
typedef long long ll;
const int inf=0x3fffffff;
const int maxn=2017;
using namespace std;
inline int read()
{
int f=1,x=0;char ch=getchar();
while(ch>'9'|ch<'0')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0')
{
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return f*x;
}
int d[N],a[N];
bool inq[N],vis[N];
struct tsdl{
int w,to,next,cost;
} edge[N*4];
int tot,head[N];
void add(int ui,int vi,int wi,int ci)
{
edge[tot].next=head[ui];
edge[tot].w=wi;
edge[tot].to=vi;
edge[tot].cost=ci;
head[ui]=tot++;
}
deque<int>q;
int n;
bool bfs(int s,int t)
{
for (int i=0;i<=n;i++)
d[i]=inf;
memset(inq,0,sizeof(inq));
d[t]=0,inq[t]=true;
q.push_back(t);
while (!q.empty())
{
int u=q.front();
q.pop_front();
inq[u]=false;
for (int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if (edge[i^1].w&&d[v]>d[u]-edge[i].cost)
{
d[v]=d[u]-edge[i].cost;
if (!inq[v])
{
inq[v]=true;
if (q.empty()||d[v]>=d[q.front()])
q.push_back(v);
else q.push_front(v);
}
}
}
}
return d[s]<d[0];
}
int dfs(int u,int f,int t)
{
vis[u]=true;
if (u==t||f==0)return f;
int used=0;
for (int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if ((!vis[v])&&edge[i].w&&d[v]==d[u]-edge[i].cost)
{
int w=f-used;
w=dfs(v,min(edge[i].w,w),t);
edge[i].w-=w;
edge[i^1].w+=w;
used+=w;
if (used==f)return used;
}
}
return used;
}
int ans,res;
int main()
{
memset(head,-1,sizeof(head));
n=read();
int m=read(),s=read(),t=read();
for (int i=1;i<=m;i++)
{
int u=read(),v=read(),w=read(),c=read();
add(u,v,w,c);
add(v,u,0,-c);
}
while (bfs(s,t))
{
vis[t]=1;
while (vis[t])
{
memset(vis,0,sizeof(vis));
int flow=dfs(s,inf,t);
res+=d[s]*flow;
ans+=flow;
}
}
printf("%d %d",ans,res);
return 0;
}
就让我永远不在这里写下什么有意义的话——by 吉林神犇 alone_wolf

浙公网安备 33010602011771号