#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
char cha[50][50];
int map[27][27];
int vis[27];
/*
struct node
{
int x,y;
}; */
int t;
queue <int> qq;
int check(int i,int k)
{
int sign[27];
memset(sign,0,sizeof(sign));
int j;
for (j=0;j<t;j++)
{
if (map[i][j])
{
sign[vis[j]]=1;
}
}
int kk;
for (kk=1;kk<=k;kk++)
{
if (!sign[kk])
{ vis[i]=kk;
return 1;
}
}
return 0;
}
int main()
{
int i,j;
while(scanf("%d",&t)!=EOF)
{
memset(cha,0,sizeof(cha));
memset(map,0,sizeof(map));
if (!t) break;
for(i=0;i<t;i++)
{
scanf("%s",cha[i]);
}
for(i=0;i<t;i++)
{
char ch=cha[i][0];
for(j=2;j<strlen(cha[i]);j++)
{
map[ch-'A'][cha[i][j]-'A']=1;
}
}
int color=1;
for(i=0;i<t;i++)
{
if (check(i,color)) ;
else
{
color++;
i--;
continue;
}
}
if (color==1)
printf("%d channel needed.\n",color);
else
printf("%d channels needed.\n",color);
}
return 0;
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
char cha[50][50];
int map[27][27];
int vis[27];
/*
struct node
{
int x,y;
}; */
int t;
queue <int> qq;
int check(int i,int k)
{
int sign[27];
memset(sign,0,sizeof(sign));
int j;
for (j=0;j<t;j++)
{
if (map[i][j])
{
sign[vis[j]]=1;
}
}
int kk;
for (kk=1;kk<=k;kk++)
{
if (!sign[kk])
{ vis[i]=kk;
return 1;
}
}
return 0;
}
int main()
{
int i,j;
while(scanf("%d",&t)!=EOF)
{
memset(cha,0,sizeof(cha));
memset(map,0,sizeof(map));
if (!t) break;
for(i=0;i<t;i++)
{
scanf("%s",cha[i]);
}
for(i=0;i<t;i++)
{
char ch=cha[i][0];
for(j=2;j<strlen(cha[i]);j++)
{
map[ch-'A'][cha[i][j]-'A']=1;
}
}
int color=1;
for(i=0;i<t;i++)
{
if (check(i,color)) ;
else
{
color++;
i--;
continue;
}
}
if (color==1)
printf("%d channel needed.\n",color);
else
printf("%d channels needed.\n",color);
}
return 0;
}
没用DFS,,无脑方法做的,数据太小了