题目:http://poj.org/problem?id=1129
AC代码(C++):
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
#include <string.h>
#include <bitset>
#define INF 0xfffffff
#define MAXN 100105
using namespace std;
int n;
bool map[30][30];
int chan[30];
void dfs(int x){
if(x==n){
return;
}
chan[x] = 1;
for(int i = 0; i < n; i++){
if(map[x][i]&&chan[i]==chan[x]){
chan[x]++;
i = -1;
}
}
dfs(x+1);
}
int main(){
while(cin>>n){
if(n==0)break;
memset(map,false,sizeof(map));
memset(chan,0,sizeof(chan));
char str[50];
int u,v;
for(int i = 0; i < n; i++){
scanf("%s",&str);
u = str[0] - 'A';
for(int j = 2; j < strlen(str); j++){
v = str[j] - 'A';
map[u][v] = true;
map[v][u] = true;
}
}
for(int i = 0; i < n; i++)dfs(i);
int max = 0;
for(int i = 0; i < n; i++){
if(chan[i]>max)max = chan[i];
}
if(max==1)cout<<"1 channel needed.\n";
else cout<<max<<" channels needed.\n";
}
}
总结: 水题.