登 录
模拟水过。
思想:对节点i,找到最小编号并且可以分配的频道j给节点i,告诉i的邻居,你们不能分配频道j。
#include<iostream> #include<cstring> using namespace std; #define N 30 int mat[N][N],res[N],final[N]; bool s[N][N]; int main() { char line[N]; int n,i,j,k,m; while(scanf("%d",&n),n) { memset(mat,0,sizeof(mat)); memset(s,0,sizeof(s)); memset(final,0,sizeof(final)); m=0; for(i=0;i<n;i++) { scanf("%s",line); for(j=2;j<strlen(line);j++) mat[i][line[j]-'A']=1; } for(i=0;i<n;i++) { j=0; while(s[i][j]) j++; res[i]=j; for(k=0;k<n;k++) if(mat[i][k]) s[k][res[i]]=1; } for(i=0;i<n;i++) final[res[i]]++; for(i=0;i<26;i++) if(final[i]>0) m++; if(m==1) printf("%d channel needed./n",m); else printf("%d channels needed./n",m); } return 0; }
抱歉!评论已关闭.