| ||||||||||
| 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 | |||||||||
AC了的程序,仅供参考#define maxn 33
#include<string.h>
#include<stdio.h>
int cover[maxn*maxn],link[maxn*maxn];
int n,m,k,num,f[maxn*maxn][maxn*maxn],d[maxn][maxn],use[maxn][maxn];
void task1()
{int t,i,j,x,y;
scanf("%d %d %d",&n,&m,&k);
memset(f,0,sizeof(f));memset(d,0,sizeof(d));memset(use,0,sizeof(use));
for (i=1;i<=k;i++)
{
scanf("%d %d",&y,&x);
use[x][y]=1;
}
num=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (use[i][j]==0) {num+=1;d[i][j]=num;};
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (use[i][j]==0)
{ t=d[i][j];
if (i-1>=1&&use[i-1][j]==0) f[t][d[i-1][j]]=1;
if (j-1>=1&&use[i][j-1]==0) f[t][d[i][j-1]]=1;
if (i+1<=n&&use[i+1][j]==0) f[t][d[i+1][j]]=1;
if (j+1<=m&&use[i][j+1]==0) f[t][d[i][j+1]]=1;
}
}
int find(int i)
{ int b,q,z;
z=0;
for(b=1;b<=num;b++)
if (f[i][b]==1&&cover[b]==0)
{
q=link[b];link[b]=i;cover[b]=1;
if (q==0||find(q)==0) return(z);
link[b]=q;
}
z=1;
return(z);
}
void maintask()
{int i;
for (i=1;i<=num;i++)
{
memset(cover,0,sizeof(cover));
find(i);
}
}
void task2()
{int i,z;
z=0;
for (i=1;i<=num;i++)
if (link[i]==0)
{z=1;break;}
if (z==1) printf("NO\n");
else printf("YES\n");
}
void main()
{
task1();
num=n*m-k;
maintask();
task2();
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator