1073 家族
#include
using namespace std;
int anc[5005];
int _find(int x){
if(anc[x]!=x)
anc[x]=_find(anc[x]);
return anc[x];
}
int main()
{
int n,m,p,a,b;
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++)anc[i]=i;
for(int i=0;i
2033 邮票
#include
#include
#include
using namespace std;
int dp[20000009];
int a[55];
int main()
{
int k,n,maxv=-1;
memset(dp,127,sizeof(dp));
scanf("%d%d",&k,&n);
for(int i=0;ik){
maxv=i-1;
break;
}
}
printf("%d\n",maxv);
return 0;
}
/*
dp[i]代表用邮票贴出i的使用张数
*/
1026 逃跑的拉尔夫
#include
using namespace std;
char g[55][55],dir[1005];
char v[1005][55][55];
int ap=0,ok,x,y,R,C,m;
struct Point{
int x,y;
}a[3000];
void dfs(int k,int i,int j){
if(v[k][i][j]){
if(v[k][i][j]==2)ok=1;
return ;
}
if(ok)return ;
//printf("(%d,%d)\n",i,j);
if(i==x&&j==y&&k<0){
ok=1;
v[k][i][j]=2;
return;
}
if(k<0)return;
switch(dir[k]){
case 'S':for(int c=i-1;c>0&&g[c][j]!='X';c--)dfs(k-1,c,j);break;
case 'N':for(int c=i+1;c<=R&&g[c][j]!='X';c++)dfs(k-1,c,j);break;
case 'E':for(int c=j-1;c>0&&g[i][c]!='X';c--)dfs(k-1,i,c);break;
case 'W':for(int c=j+1;c<=C&&g[i][c]!='X';c++)dfs(k-1,i,c);break;
}
if(ok)v[k][i][j]=2;
else v[k][i][j]=1;
}
int main()
{
char s[10];
scanf("%d%d",&R,&C);
for(int i=1;i<=R;i++){
scanf("%s",g[i]+1);
for(int j=1;j<=C;j++){
if(g[i][j]=='*'){x=i;y=j;}
if(g[i][j]=='.'||g[i][j]=='*'){a[ap].x=i;a[ap].y=j;++ap;}
}
}
scanf("%d",&m);
for(int i=0;i
Finished!