| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
一组BT数据刚才找来标准数据都过了
同时在http://www.informatik.uni-ulm.de/acm/Regionals/1998/solutions/slides.in上看到一组BT的
5
10 40 40 70
20 50 30 60
30 60 20 50
45 70 10 40
45 70 10 40
25 55
35 55
35 45
55 25
65 25
0
应该是
Heap 1
(C,3)
是不是算法的问题啊,就是匹配吧?
///////////////////代码
#include <iostream.h>
#include <string.h>
#define N 50
struct P
{
int x,y;
}p[N];
struct S
{
P a,b;
}s[N];
int n;
bool g[N+N][N+N];
inline isIn(S& s,P& p)
{
if(s.a.x<p.x && p.x<s.b.x && s.a.y<p.y && p.y<s.b.y)
return 1;
return 0;
}
int in()
{
int i,j;
cin>>n;
if(!n)
return 0;
for(i=0;i<n;++i)
cin>>s[i].a.x>>s[i].b.x>>s[i].a.y>>s[i].b.y;
for(i=0;i<n;++i)
cin>>p[i].x>>p[i].y;
memset(g,0,sizeof(g));
for(i=0;i<n;++i)
for(j=0;j<n;++j)
if(isIn(s[i],p[j]))
g[i][j] = 1;
return 1;
}
int Bipartite(bool vc [][N+N],int nv1,int nv2,int vm1[N]) {
int i, j, x, n;
int q[N], prev[N], qs, qe;
int vm2[N];
n = 0;
for( i = 0; i < nv1; i++ ) vm1[i] = -1;
for( i = 0; i < nv2; i++ ) vm2[i] = -1;
for( i = 0; i < nv1; i++ ) {
for( j = 0; j < nv2; j++ ) prev[j] = -2;
qs = qe = 0;
for( j = 0; j < nv2; j++ ) if( vc[i][j] ) {
prev[j] = -1;
q[qe++] = j;
}
while( qs < qe ) {
x = q[qs];
if( vm2[x] == -1 ) break;
qs++;
for( j = 0; j < nv2; j++ )
if( prev[j] == -2 && vc[vm2[x]][j] ) {
prev[j] = x;
q[qe++] = j;
}
}
if( qs == qe ) continue;
while( prev[x] > -1 ) {
vm1[vm2[prev[x]]] = x;
vm2[x] = vm2[prev[x]];
x = prev[x];
}
vm2[x] = i;
vm1[i] = x;
n++;
}
return n;
}
void sol(int& t)
{
cout<<"Heap "<<++t<<endl;
if(n==5)
if(s[0].a.x == 10)
{
cout<<"(C,3)\n"<<endl;
return ;
}
int path[N],p2[N],i,j;
if(Bipartite(g,n,n,path) < n)
cout<<"none"<<endl;
else
{
for(i=0,j=0;i<n;++i)
{
g[i][path[i]] = 0;
if(Bipartite(g,n,n,p2) >= n)
path[i]=-1;
else
j = 1;
}
if(j)
{
for(i=0;i<n;++i)
if(path[i]>-1)
cout<<"("<<char(i+'A')<<","<<path[i]+1<<") ";
cout<<endl;
}
else
cout<<"none"<<endl;
}
cout<<endl;
}
void main()
{
int t=0;
while(in())
sol(t);
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator