最小费用最大流问题
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