【最小割】【poj 3469】 Language
来源:互联网 发布:电信光纤网络优化大师 编辑:程序博客网 时间:2024/05/31 05:27
http://poj.org/problem?id=3469
poj上加读入优化慢了2s+hhhhhhhhhhhh
学习了一种新的技术。。。
//#define _TEST _TEST#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <cmath>#include <algorithm>using namespace std;/************************************************Code By willinglive Blog:http://willinglive.cf************************************************/#define rep(i,l,r) for(int i=(l),___t=(r);i<=___t;i++)#define per(i,r,l) for(int i=(r),___t=(l);i>=___t;i--)#define MS(arr,x) memset(arr,x,sizeof(arr))#define LL long long#define INE(i,u,e) for(int i=head[u];~i;i=e[i].next)inline const int read(){int r=0,k=1;char c=getchar();for(;c<'0'||c>'9';c=getchar())if(c=='-')k=-1;for(;c>='0'&&c<='9';c=getchar())r=r*10+c-'0';return k*r;}/////////////////////////////////////////////////const int N=20100;const int inf=0x3f3f3f3f;int n,m;struct edge{int v,flow,cap,next;}e[2000000];int head[N],k;int S,T;int q[N],d[N],cur[N];int cnt=0;/////////////////////////////////////////////////inline void MIN(int &a,int b){if(a>b)a=b;}inline void adde(int u,int v,int flow){e[k].v=v;e[k].flow=0;e[k].cap=flow;e[k].next=head[u];head[u]=k++;}inline void ins(int u,int v,int f1,int f2){adde(u,v,f1);adde(v,u,f2);}bool bfs_init(){MS(d,-1);d[q[0]=S]=0;for(int u,v,l=0,r=1;l<r;){u=q[l++];INE(i,u,e)if(e[i].flow<e[i].cap && d[v=e[i].v]==-1){q[r++]=v,d[v]=d[u]+1;if(v==T) return 1;}}return 0;}int dinic(){int maxf=0,iter,u;while(bfs_init()){iter=0,u=S;memcpy(cur,head,sizeof(cur));while(cur[S]!=-1){ if(u==T){int minf=inf;per(i,iter-1,0) MIN(minf,e[q[i]].cap-e[q[i]].flow);per(i,iter-1,0){e[q[i]].flow+=minf, e[q[i]^1].flow-=minf;if(e[q[i]].flow==e[q[i]].cap) iter=i;}maxf+=minf; u=e[q[iter]^1].v;}else if(cur[u]!=-1 && e[cur[u]].flow<e[cur[u]].cap && d[u]!=-1 && d[u]+1==d[e[cur[u]].v]){q[iter++] = cur[u]; u = e[cur[u]].v;}else{ while(iter&&u!=S&&cur[u]==-1) u=e[q[--iter]^1].v; cur[u]=e[cur[u]].next;}}}return maxf;}/////////////////////////////////////////////////void input(){MS(head,-1);scanf("%d%d",&n,&m); S=0; T=n+1; int a,b,w; rep(i,1,n) { scanf("%d%d",&a,&b); ins(S,i,a,0); ins(i,T,b,0); } rep(i,1,m) { scanf("%d%d%d",&a,&b,&w); ins(a,b,w,w); }}void solve(){cout<<dinic()<<endl;}/////////////////////////////////////////////////int main(){ freopen("std.in","r",stdin); freopen("std.out","w",stdout); input(),solve(); return 0;}
0 0
- 【最小割】【poj 3469】 Language
- poj 3469 最小割
- poj 3469 最小割
- POJ 3469 最小割
- POJ 3469 最小割
- poj 3469 最小割
- POJ 3469 最小割
- poj 3469(最小割)
- POJ 3469 (最小割)
- poj 3469(最小割)
- poj 3469(最小割)
- 3469poj(最小割)
- POJ 3469 Dual Core CPU //最小割
- poj 3469(最大流最小割)
- POJ 3469 构图最小割+链表SAP
- POJ 3469 最小割 最大流
- poj 3469 最大流 最小割
- POJ 3469 Dual Core CPU(最小割)
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
- WP_Query的使用方法
- rhel中定时任务cron解析
- Python生成文件md5校验值函数
- VelocityTracker简介
- 【最小割】【poj 3469】 Language
- 线程模型
- linux驱动——并发控制
- Android 自定义控件 实现 创建
- Structs2 request_locale国际化介绍
- android之Activity的生命周期
- 利用QT创建artoolkitplus工程几个注意点
- 解决Hyper-V和VT-x冲突的方法
- Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2