Пример #1
0
int main()
{
	while(scanf("%s",sudoku)!=EOF)
	{
		for(int i=1;i<16;i++)
            scanf("%s",sudoku+i*16);
		dlx.init(N*N*N,N*N*4);
		for(int i=0;i<N;i++)
		{
			for(int j=0;j<N;j++)
			{
				for(int k=1;k<=N;k++)
				{
					if(sudoku[i*N+j]=='-'||sudoku[i*N+j]==k+'A'-1)
					{
						int r,c1,c2,c3,c4;
						place(r,c1,c2,c3,c4,i,j,k);
						dlx.Link(r,c1);
						dlx.Link(r,c2);
						dlx.Link(r,c3);
						dlx.Link(r,c4);
					}
				}
			}
		}
		dlx.Dance(0);
		putchar(10);
	}
	return 0;
}
Пример #2
0
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int T;
    int n,m;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d%d",&n,&m,&K);
        for(int i = 0;i < n;i++)city[i].input();
        for(int i = 0;i < m;i++)station[i].input();
        double l = 0, r = 1e8;
        while(r-l >= eps)
        {
            double mid = (l+r)/2;
            g.init(m,n);
            for(int i = 0;i < m;i++)
                for(int j = 0;j < n;j++)
                    if(dis(station[i],city[j]) < mid - eps)
                        g.Link(i+1,j+1);
            if(g.Dance(0))r = mid-eps;
            else l = mid+eps;
        }
        printf("%.6lf\n",l);
    }
    return 0;
}
Пример #3
0
void slove()
{
    dlx.init(N,N);

    for(int i=1; i<=N; ++i)
        for(int j=1; j<=N; ++j)
            if(num[i]%num[j]==0 || num[j]%num[i]==0)
                dlx.Link(i,j);

    dlx.Dance(0);

    cout<<dlx.ansnum<<endl;
}
Пример #4
0
int getans()
{
	int m=0;

	for(m=0;m<pcou;++m)
		if(prime[m]>N)
			break;

	dlx.init(N,m);

	for(int i=0;i<m;++i)
		for(int j=0;j<rcou[i] && rem[i][j]<=N;++j)
			dlx.Link(rank[rem[i][j]],i+1);

	dlx.Dance(0);

	return dlx.ans;
}
Пример #5
0
int main() {
    while(scanf("%s",g) == 1) {
        if(strcmp(g,"end") == 0) break;
        dlx.init(N*N*N,N*N*4);
        int r,c1,c2,c3,c4;
        for(int i = 0;i < N;i++)
            for(int j = 0;j < N;j++)
                for(int k = 1;k <= N;k++)
                    if(g[i*N+j] == '.' || g[i*N+j] == '0'+k) {
                        place(r,c1,c2,c3,c4,i,j,k);
                        dlx.Link(r,c1);
                        dlx.Link(r,c2);
                        dlx.Link(r,c3);
                        dlx.Link(r,c4);
                    }
        dlx.Dance(0);
    }
    return 0;
}
Пример #6
0
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        dlx.init(2*m,n);
        for(int i=1;i<=n;i++)
        {
            int k;
            scanf("%d",&k);
            for(int j=0;j<k;j++)
            {
                int p; char sw[20];
                scanf("%d%s",&p,sw);
                if(sw[1]=='N') dlx.Link(2*p-1,i);
                else if(sw[1]=='F') dlx.Link(2*p,i);
            }
        }
        dlx.Dance(0);
        if(flag==false) puts("-1");
    }
    return 0;
}
Пример #7
0
void slove()
{
	dlx.init(729,324);

	for(int i=1;i<=81;++i)
		for(int j=1;j<=9;++j)
			dlx.Link(j+(i-1)*9,i);

	for(int i=1;i<=81;++i)
		for(int j=1;j<=9;++j)
			dlx.Link(9*(j-1)+(i-1)%9+1+81*((i-1)/9),i+81);

	for(int i=1;i<=81;++i)
		for(int j=1;j<=9;++j)
			dlx.Link((j-1)*81+i,i+162);

	for(int i=1;i<=3;++i)
		for(int j=1;j<=3;++j)
			for(int k=1;k<=9;++k)
				for(int l=1;l<=3;++l)
					for(int m=1;m<=3;++m)
						dlx.Link((i-1)*243+(j-1)*27+k+(l-1)*81+(m-1)*9,(i-1)*27+(j-1)*9+k+243);

	for(int i=0;i<81;++i)
		if(s[i]!='.')
		{
			dlx.ans1[i+1]=s[i]-'0';

			dlx.remove(i+1);

			for(int j=dlx.D[i+1];j!=i+1;j=dlx.D[j])
			{
				if((dlx.row[j]-1)%9+1==s[i]-'0')
				{
					for(int k=dlx.R[j];k!=j;k=dlx.R[k])
						dlx.remove(dlx.col[k]);
					
					break;
				}
			}
		}

	dlx.Dance(0);
}
Пример #8
0
void slove()
{
	int r,c1,c2,c3,c4;

	dlx.init(729,324);

	for(int i=0;i<9;++i)
		for(int j=0;j<9;++j)
			for(int k=1;k<=9;++k)
				if(s[i*9+j]==0 || s[i*9+j]==k)
				{
					getchange(r,c1,c2,c3,c4,i,j,k);

					dlx.Link(r,c1);
					dlx.Link(r,c2);
					dlx.Link(r,c3);
					dlx.Link(r,c4);
				}

/*	for(int i=1;i<=81;++i)
		for(int j=1;j<=9;++j)
			dlx.Link(j+(i-1)*9,i);

	for(int i=1;i<=81;++i)
		for(int j=1;j<=9;++j)
			dlx.Link(9*(j-1)+(i-1)%9+1+81*((i-1)/9),i+81);

	for(int i=1;i<=81;++i)
		for(int j=1;j<=9;++j)
			dlx.Link((j-1)*81+i,i+162);

	for(int i=1;i<=3;++i)
		for(int j=1;j<=3;++j)
			for(int k=1;k<=9;++k)
				for(int l=1;l<=3;++l)
					for(int m=1;m<=3;++m)
						dlx.Link((i-1)*243+(j-1)*27+k+(l-1)*81+(m-1)*9,(i-1)*27+(j-1)*9+k+243);

	for(int i=0;i<81;++i)
		if(s[i]!='.')
		{
			dlx.ans1[i+1]=s[i]-'0';

			dlx.remove(i+1);

			for(int j=dlx.D[i+1];j!=i+1;j=dlx.D[j])
			{
				if((dlx.row[j]-1)%9+1==s[i]-'0')
				{
					for(int k=dlx.R[j];k!=j;k=dlx.R[k])
						dlx.remove(dlx.col[k]);
					
					break;
				}
			}
		}
*/

	dlx.Dance(0);

	int temp=dlx.ansnum;

	if(temp==0)
		cout<<"No solution"<<endl;
	else if(temp==2)
		cout<<"Multiple Solutions"<<endl;
	else
		dlx.showans();
}