网络流入门
2016-07-30 10:08
393 查看
poj1459
http://poj.org/problem?id=1459
电站由组成consumer,dispatcher,power station,问最大传输电流
题意故意弄得非常复杂,其实就是多源多汇点,那么只要设置一个s往所有的源连,把所有的汇连到一个t再dinic就行了。
值得注意的两点:1.init必须在所有的开头调用 2.这题的(1,2)20这种读入比较奇葩,只要先读入buf,然后sscanf("(%d,%d)%d")就可以了
View Code
poj2455
蜜汁无限tle,暂时搁置
http://poj.org/problem?id=1459
电站由组成consumer,dispatcher,power station,问最大传输电流
题意故意弄得非常复杂,其实就是多源多汇点,那么只要设置一个s往所有的源连,把所有的汇连到一个t再dinic就行了。
值得注意的两点:1.init必须在所有的开头调用 2.这题的(1,2)20这种读入比较奇葩,只要先读入buf,然后sscanf("(%d,%d)%d")就可以了
#include<cstdio> #include<cstring> #include<cstdlib> #include<vector> #include<algorithm> #include<functional> #include<iostream> #include<cmath> #include<string> #include<cctype> #include<stack> #include<queue> #include<set> #include<map> #include<ctime> using namespace std; #define For(i,k,n) for(int i=k;i<=n;i++) #define ForD(i,k,n) for(int i=n;i>=k;i--) #define Lson (x<<1) #define Rson ((x<<1)+1) #define MEM(a) memset(a,0,sizeof(a)); #define NEG(a) memset(a,-1,sizeof(a)); #define FILL(a) memset(a,0x3f,sizeof(a)); #define INF 0x3f3f3f3f #define LLINF 0x3f3f3f3f3f3f3f3f #define ll long long #define print(b,a) cout<<b<<"="<<a<<endl; #define printbin(b,a){int tmp=a;string s;do{s+=tmp%2+'0';tmp/=2;}while(tmp);reverse(s.begin(),s.end());cout<<"bin "<<b<<"="<<s<<endl;} #define printarr(i,a,f,b) {For(i,f,b) printf("%d ",a[i]); printf("\n");} #define MAXN 400000 struct Node { int from,to,next; int cap; }edge[MAXN]; int tol; int dep[MAXN];//dep为点的层次 int head[MAXN]; void init() { tol=0; memset(head,-1,sizeof(head)); } void addedge(int u,int v,int w)//第一条变下标必须为偶数 { edge[tol].from=u; edge[tol].to=v; edge[tol].cap=w; edge[tol].next=head[u]; head[u]=tol++; edge[tol].from=v; edge[tol].to=u; edge[tol].cap=0; edge[tol].next=head[v]; head[v]=tol++; //printf("u=%d v=%d w=%d\n",u,v,w); } int BFS(int start,int end) { int que[MAXN]; int front,rear; front=rear=0; memset(dep,-1,sizeof(dep)); que[rear++]=start; dep[start]=0; while(front!=rear) { int u=que[front++]; if(front==MAXN)front=0; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].to; if(edge[i].cap>0&&dep[v]==-1) { dep[v]=dep[u]+1; que[rear++]=v; if(rear>=MAXN)rear=0; if(v==end)return 1; } } } return 0; } int dinic(int start,int end) { int res=0; int top; int stack[MAXN]; int cur[MAXN]; while(BFS(start,end)) { memcpy(cur,head,sizeof(head)); int u=start; top=0; while(1) { if(u==end) { int min=INF; int loc; for(int i=0;i<top;i++) if(min>edge[stack[i]].cap) { min=edge[stack[i]].cap; loc=i; } for(int i=0;i<top;i++) { edge[stack[i]].cap-=min; edge[stack[i]^1].cap+=min; } res+=min; top=loc; u=edge[stack[top]].from; } for(int i=cur[u];i!=-1;cur[u]=i=edge[i].next) if(edge[i].cap!=0&&dep[u]+1==dep[edge[i].to]) break; if(cur[u]!=-1) { stack[top++]=cur[u]; u=edge[cur[u]].to; } else { if(top==0)break; dep[u]=-1; u=edge[stack[--top]].from; } } } return res; } int d[250][250]; int K,C,M; void floyd() { For(k,1,K+C) For(i,1,K+C) For(j,1,K+C) d[i][j]=min(d[i][j],d[i][k]+d[k][j]); // For(i,1,K+C) For(j,1,K+C) printf("d[%d][%d]=%d\n",i,j,d[i][j] ); } int main() { //freopen("in.txt","r",stdin); scanf("%d%d%d",&K,&C,&M); For(i,1,K+C) For(j,1,K+C) { scanf("%d",&d[i][j]); if(d[i][j]==0) d[i][j]=INF; } floyd(); int l=1,r=9999999,ans=1; while(l<=r) { int m=(l+r)/2; //printf("m=%d\n",m); init(); For(i,1,K) addedge(0,i,M); For(i,K+1,K+C) addedge(i,K+C+1,1); For(i,1,K) For(j,K+1,K+C) if(m>=d[i][j]) addedge(i,j,1); int ret=dinic(0,K+C+1); //printf("ret=%d\n",ret); if(ret==C) { r=m-1; ans=m; } else { l=m+1; } } printf("%d\n",ans); return 0; }
View Code
poj2455
蜜汁无限tle,暂时搁置
相关文章推荐
- (一个常用的案例)Fragment xlistview pull 网络请求 刷新分页加载 ImageLoader
- 在inet_peer/tcp_metrics_hash中记录通往一个IP地址的链路状况历史的metrics信息
- IOS网络请求的一些需要记录的info设置
- 精选30道Java笔试题(原网站:http://www.cnblogs.com/lanxuezaipiao/p/3371224.html)
- Python网络编程之socket编程(一)--使用TCP和UDP客户端和服务器通信
- [置顶] pull解析请求网络的数据(带分页加载,刷新) xlistview HttpUtils
- 神经网络与深度学习读书笔记第二天
- http://ambitiongold.blog.163.com/blog/static/1840165522012921103511610/
- 2016太原网络营销师解说怎样让产品盈利,你知道吗?
- 题目199 无线网络覆盖
- python socket 实现的简单http服务器
- CS231n 学习笔记(3)——神经网络 part3 :最优化
- 使用 枫彩网络_云流量____向导
- Android网络编程
- Android下使用TcpDump抓包Wireshark分析数据
- 1.1.4 计算机网络的分类
- OkHttp源码解析(五)——cache缓存
- 1.1.3 计算机网络的功能
- 在线修改http header
- redhat6.5 设置本地yum源和网络yum源