POJ 1486 Sorting Slides (二分图匹配)
2011-08-03 22:13
183 查看
刚学二分图,基本的匈牙利和KM运用还好,今晚被这题搞的头大!刚开始以为一个匈牙利就OK了,后来发现如果图和坐标点都重在一起的话匹配肯定可以完成。
所以就用了一次topsort。然后还是WA! 后来很蛋疼的发现里面的一句话 "Then print a series of all the slides whose numbers can be uniquely determined from the input. "
解释为,只要有一个输入是可以被推出的就要输出! 我勒个去啊!删了topsort改成去掉一条已经匹配边,重建图,重新匈牙利,返回值不同就输出,同样就跳过,最后判断无
输出就none! 终于AC了!
感觉刚开始被我复杂化的图。其实关键一步想对了就好了!很多时候我们都是自己把问题想多了,代码就略长了!所以嘛!你懂得! 看不懂的地方可以留言!
所以就用了一次topsort。然后还是WA! 后来很蛋疼的发现里面的一句话 "Then print a series of all the slides whose numbers can be uniquely determined from the input. "
解释为,只要有一个输入是可以被推出的就要输出! 我勒个去啊!删了topsort改成去掉一条已经匹配边,重建图,重新匈牙利,返回值不同就输出,同样就跳过,最后判断无
输出就none! 终于AC了!
#include <iostream> #include <stdio.h> #include <string.h> usingnamespace std; struct node { int x1,x2,y1,y2; char flag; }; #define N 40 node nodes ; int number ; int map ; int t; int dx ,dy ; int vis ; int DFS(int v) { for(int i=1;i<=t;i++) if(!vis[i]&&map[v][i]) { vis[i]=1; if(dy[i]==-1||DFS(dy[i])) { dx[v]=i; dy[i]=v; return1; } } return0; } int Hungary() { int i; int ans=0; memset(dx,-1,sizeof(dx)); memset(dy,-1,sizeof(dy)); for(i=1;i<=t;i++) if(dx[i]==-1) { memset(vis,0,sizeof(vis)); ans+=DFS(i); } return ans; } int main() { int n,m,i,j; int scase=0; int flag=0; while(scanf("%d",&t)!=EOF&&t) { printf("Heap %d\n",++scase); char s='A'; flag=0; for(i=1;i<=t;i++) { scanf("%d%d%d%d",&nodes[i].x1,&nodes[i].x2,&nodes[i].y1,&nodes[i].y2); nodes[i].flag=s++; } memset(map,0,sizeof(map)); for(i=1;i<=t;i++) { scanf("%d%d",&n,&m); number[i]=i; for(j=1;j<=t;j++) if(nodes[j].x1<n&&nodes[j].x2>n&&nodes[j].y1<m&&nodes[j].y2>m) map[j][i]=1; } int dx1 ; memset(dx1,0,sizeof(dx1)); int sum=Hungary(); for(i=1;i<=t;i++) dx1[i]=dx[i]; for(i=1;i<=t;i++) { map[i][dx1[i]]=0; if(Hungary()!=sum) { if(flag==0) printf("(%c,%d)",nodes[i].flag,number[dx1[i]]); else printf(" (%c,%d)",nodes[i].flag,number[dx1[i]]); flag=1; } map[i][dx1[i]]=1; } if(!flag) printf("none"); printf("\n\n"); } return0; }
感觉刚开始被我复杂化的图。其实关键一步想对了就好了!很多时候我们都是自己把问题想多了,代码就略长了!所以嘛!你懂得! 看不懂的地方可以留言!
相关文章推荐
- poj 1486 Sorting Slides(二分图匹配必要边)
- poj 1486 Sorting Slides(二分图匹配)
- poj 1486 Sorting Slides(二分图匹配的查找应用)
- POJ 1486 Sorting Slides(二分图匹配)
- poj1486 - Sorting Slides
- POJ 1486 Sorting Slides(二分图必须边)
- POJ 1486 Sorting Slides
- poj 1486 Sorting Slides
- [ ZOJ 1197 ] [POJ 1486] Sorting Slides
- POJ 1486 Sorting Slides 最大二分匹配 匈牙利算法
- Sorting Slides(poj1486,绝对匹配边)
- POJ 1486 Sorting Slides (二分图关键匹配边)
- POJ - 1486 Sorting Slides 二分图 完美匹配
- POJ 1486 Sorting Slides (二分图关键匹配边)
- POJ 1486 Sorting Slides 求二分图的必须边
- POJ 1486 Sorting Slides
- POJ 1486 Sorting Slides(二分图最大匹配:关键边)
- poj1486 sorting slides (二分图最大匹配的唯一性)
- POJ1486:Sorting Slides
- POJ 1486 Sorting Slides【二分图匹配】