poj3041Asteroids
来源:互联网 发布:手机发帖软件 编辑:程序博客网 时间:2024/05/29 18:38
按点的x坐标和y坐标构建两个点的集合,
把源点和x坐标的点连起来,把y坐标的点和汇点连起来。
求一遍最小割。
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<set>#include<map>#include<queue>#include<vector>#include<string>#define eps 1e-12#define INF 0x7fffffff#define maxn 22222using namespace std;int n,m,k;int en;int st,ed;//源点和汇点int dis[maxn] ;//dis[i],表示 到 原点 s 的 层数int que[999999];struct edge{int to,c,next;};edge e[999999];int head[maxn];void add(int a,int b,int c){e[en].to=b;e[en].c=c;e[en].next=head[a];head[a]=en++;e[en].to=a;e[en].c=0;e[en].next=head[b];head[b]=en++;}int bfs(){ memset(dis,-1,sizeof(dis)); dis[st]=0; int front=0,rear=0; que[rear++]=st; while(front<rear) { int j=que[front++]; for(int k=head[j];k!=-1;k=e[k].next) { int i=e[k].to;if(dis[i]==-1&&e[k].c) { dis[i] = dis[j]+ 1 ; que[rear++]=i; if(i==ed) return true; } } } return false;}int dfs(int x,int mx){ int i,a;if(x==ed) return mx; int ret=0; for(int k=head[x];k!=-1&&ret<mx;k=e[k].next) { if(e[k].c&&dis[e[k].to]==dis[x]+1) { int dd=dfs(e[k].to,min(e[k].c,mx-ret)); e[k].c-=dd; e[k^1].c+=dd; ret+=dd; } } if(!ret) dis[x]=-1; return ret;}int dinic(){ int tmp=0; int maxflow=0; while(bfs()) { while(tmp=dfs(st,INF)) maxflow+=tmp; } return maxflow;}void init(){ en=0;st=3*m+1; //源 ed=3*m+2; //汇memset(head,-1,sizeof(head));}void build(){ int x,y,z; for(int i=1;i<=k;i++) { scanf("%d%d",&x,&y); add(x,y+m,1); } for(int i=1;i<=m;i++) { add(st,i,1); add(i+m,ed,1); }}int main(){ freopen("asteroids.in","r",stdin); freopen("asteroids.out","w",stdout); scanf("%d%d",&m,&k); { init(); build(); printf("%d\n",dinic()); } return 0;}
0 0
- poj3041Asteroids
- POJ3041Asteroids!
- poj3041Asteroids 简单二分匹配
- POJ3041Asteroids(二分图最大匹配)
- 【网络流-二分图最大匹配】poj3041Asteroids
- poj3692Kindergarten poj2584T-Shirt Gumbo多重匹配 拆点 poj3041Asteroids
- 开始blog之旅
- AWS placement group ,ENI ,EIP学习笔记
- C语言中一些很酷的技巧(cool tricks)
- Ubuntu 12.04 中文输入法IBus的安装
- 不,Linux桌面未死
- poj3041Asteroids
- Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
- 缓冲区溢出详解
- 使用Zoundry Writer+代码片+七牛云 离线发布博客
- 虚拟存储器 与虚拟内存详解
- POJ 1014 Dividing
- 锌钢阳台护栏为何越来越受青睐
- Linux Grub开机启动故障排查
- Android 权限表