标签:pre ssi ges tomat algo blog none hose following
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 4777 | Accepted: 1867 |
Description
Input
Output
Sample Input
4 6 22 10 20 4 18 6 16 8 20 2 18 10 24 4 8 9 15 19 17 11 7 21 11 2 0 2 0 2 0 2 0 2 1 1 1 1 0
Sample Output
Heap 1 (A,4) (B,1) (C,2) (D,3) Heap 2 none
贪心WA 二分又WA一次
5
1 4 1 4
2 7 2 7
5 11 5 11
8 13 9 14
9 14 8 13
3 3
3 3
6 6
10 10
12 12
结果应该是(C,3),但贪心的结果是none
#include<vector> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=33; int used[N],x[N],y[N]; bool vis[N],mp[N][N]; vector<int>G[N]; struct node { int xi,xx,yi,yx; } e[N]; struct point { int x,y; bool operator < (const point &A)const { return x<A.x; } } al[N]; bool findx(int x) { for(int i=0; i<(int)G[x].size(); ++i) { int v=G[x][i]; if(vis[v]||mp[x][v]) continue; vis[v]=1; if(!used[v]||findx(used[v])) { used[v]=x; return true; } } return false; } int ctx[N],cty[N]; int main() { int n,tas=1; while(scanf("%d",&n),n) { for(int i=1; i<=n; ++i) G[i].clear(); for(int i=1; i<=n; ++i) scanf("%d%d%d%d",&e[i].xi,&e[i].xx,&e[i].yi,&e[i].yx); for(int i=1; i<=n; ++i) scanf("%d%d",&x[i],&y[i]); for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) if(e[i].xi<=x[j]&&x[j]<=e[i].xx&&e[i].yi<=y[j]&&e[i].yx>=y[j]) G[i].push_back(j); memset(used,0,sizeof(used)); memset(mp,0,sizeof(mp)); int tot=0,maxmatch=0,fx=0; for(int i=1; i<=n; ++i) { memset(vis,0,sizeof(vis)); if(findx(i)) ++maxmatch; } for(int i=1; i<=n; ++i) if(used[i]) ctx[tot]=used[i],cty[tot++]=i; printf("Heap %d\n",tas++); if(!tot) puts("none"); else {
/*for(int i=0; i<tot; ++i)
{
mp[ctx[i]][cty[i]]=1;
memset(vis,0,sizeof(vis));
used[cty[i]]=0;
if(!findx(ctx[i])) al[fx].x=ctx[i],al[fx++].y=cty[i];
mp[ctx[i]][cty[i]]=0;
used[cty[i]]=ctx[i];
}这么写不对的*/
for(int i=0; i<tot; ++i) { int now=0; mp[ctx[i]][cty[i]]=1; memset(used,0,sizeof(used)); for(int i=1; i<=n; ++i) { memset(vis,0,sizeof(vis)); if(findx(i)) ++now; } if(now!=maxmatch) al[fx].x=ctx[i],al[fx++].y=cty[i]; mp[ctx[i]][cty[i]]=0; } if(!fx) puts("none"); else { sort(al,al+fx); for(int i=0; i<fx; ++i) printf("(%c,%d) ",al[i].x+‘A‘-1,al[i].y); puts(""); } } puts(""); } }
标签:pre ssi ges tomat algo blog none hose following
原文地址:http://www.cnblogs.com/mfys/p/7610469.html