【完全二分匹配必须边】POJ 1486
来源:互联网 发布:plc编程软件安装不了 编辑:程序博客网 时间:2024/06/05 10:18
刚开始没看清楚题目,直接匈牙利算法,后来看到一句话Then print a series of all the slides whose numbers can be uniquely determined from the input
输出要唯一!就是问每条边是否唯一,做法:先用一次匈牙利求出一个匹配,再逐条边拆,当出现另一个完全匹配时就是none,否则可以输出结果。注意match[i] = j的i是x,j是y。
#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <cstdio>#include <math.h>#include <iomanip>#include <cstdlib>#include <limits.h>#include <string.h>#include <iostream>#include <fstream>#include <algorithm>using namespace std;#define LL long long#define MIN -9999999#define MAX INT_MAX#define pii pair<int ,int>#define bug cout<<"here!!"<<endl#define PI acos(-1.0)#define FRE freopen("input.txt","r",stdin)#define FF freopen("output.txt","w",stdout)#define eps 1e-8#define N 1005int min(int a,int b){return a>b?b:a;}int max(int a,int b){return a>b?a:b;}bool g[N][N],vis[N];int match[N];int n;int ans[N];struct re{ int xmin,xmax,ymin,ymax;}p[N];struct node{ int x,y;}q[N];bool sear(int x){//匈牙利算法 for(int i=0;i<n;i++){ if(g[x][i] && !vis[i]){ vis[i] = 1; if(match[i]== -1 || sear(match[i])){ match[i] = x; return true; } } } return false;}bool chk(int i,int j){ if(q[j].x>=p[i].xmin && q[j].x<=p[i].xmax && q[j].y>=p[i].ymin && q[j].y<=p[i].ymax) return true; return false;}void gao(){ int i,j; bool ok = 0; for(i=0;i<n;i++){ int tmp = match[i]; g[tmp][i] = 0; match[i] = -1; memset(vis,0,sizeof(vis)); if(!sear(tmp)) { if(ok)printf(" "); printf("(%c,%d)",i+'A',tmp+1); ok = 1;match[i] = tmp; } g[tmp][i] = 1; } if(!ok){ puts("none\n"); } else { printf("\n\n"); }}int main(){int t=1; while(scanf("%d",&n) && n){ int i,j; memset(g,0,sizeof(g)); for(i=0;i<n;i++){ scanf("%d%d%d%d",&p[i].xmin,&p[i].xmax,&p[i].ymin,&p[i].ymax); match[i] = -1; } for(i=0;i<n;i++){ scanf("%d%d",&q[i].x,&q[i].y); } for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(chk(i,j)){ g[j][i] = 1; } } } int cnt=0; for(i=0;i<n;i++){ memset(vis,0,sizeof(vis)); if(sear(i))cnt++; } printf("Heap %d\n",t++); if(cnt!=n){ puts("none"); puts(""); } else { gao(); } } return 0;}
- 【完全二分匹配必须边】POJ 1486
- poj 1486 二分图最大匹配必须边
- poj 1486(二分图匹配的必须边:枚举)
- POJ 1486:二分图匹配的必须边
- POJ 1486 Sorting Slides 二分匹配变形 完全匹配
- poj 1486(求二分图形成匹配的必须边)
- POJ 1904 (确定完全二分匹配的所有可能边)
- poj 1486(二分图必须边)
- poj 1486 二分图的必须边
- POJ1486_Sorting Slides_二分图匹配必须边
- POJ 1486 Sorting Slides 求二分图的必须边
- POJ 1486 Sorting Slides(二分图必须边)
- POJ 1486 Sorting Slides(二分图最大匹配:关键边)
- POJ 1486 Sorting Slides(二分图最大匹配:关键边)
- poj 1486 Sorting Slides(二分图匹配必要边)
- POJ 1486 Sorting Slides(二分图最大匹配:关键边)
- poj 1486 Sorting Slides 二分匹配
- poj 1486 Sorting Slides(二分匹配)
- struts.xml配置详解
- 代理模式
- 恢复Active Desktop
- android中sqlite的query中的String[]造成sql畸形
- 用autotools制作Makefile 和configure文件
- 【完全二分匹配必须边】POJ 1486
- 使用进程加载应用程序
- 众多Android 开源项目推荐,给力工作给力学习
- 读取用户的属性时,发现了以下错误:没有启动服务器
- Mac上开发OpenGL程序
- 定义客户需求的原则和方法
- 关于HTML5你不得不知道的五件事情
- Windows7旗舰版启动项修改
- 三层架构与MVC