| ||||||||||
| 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 | |||||||||
Re:一组BT数据In Reply To:一组BT数据 Posted by:lookus at 2005-07-14 21:34:43 > 刚才找来标准数据都过了
> 同时在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 ;
> }
> */ 这儿是想把那组数据骗过,但失败了,rp阿
> 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