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