MDeath-Kid

- M I T & Y
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

POJ 1129

Posted on 2011-06-08 09:42  MDeath-Kid  阅读(221)  评论(0编辑  收藏  举报

相邻定点不能为一种频道,转化为图定点的着色问题。

1129
/*
8737793 MDK 1129 Accepted 692K 0MS G++ 1858B 2011-06-08 09:40:42
*/
#include
<stdio.h>
#include
<iostream>
#include
<limits.h>

#include
<string.h>
#include
<math.h>
#include
<time.h>

#include
<vector>
#include
<list>
#include
<algorithm>
#include
<set>
#include
<map>
#include
<stack>
#include
<queue>
#include
<deque>

using namespace std;

#define MAXN 26
#define MAXNT 5050
#define LL(x) ((x)<<1)
#define RR(x) ((x)<<1|1)
#define F(i,n) for(int i = 0 ; i < n ; i ++)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define DB(a) cout<<a<<endl
#define PP(n,m,a) puts("---");F(i,n){F(j,m)cout << a[i][j] << ' ';puts("-");}puts("---");
#define SET(a,what) memset(a,what,sizeof(a))
#define SETQ(que) while(!que.empty()) que.pop();
#define SCF(x) scanf("%d",&x)
#define SCFD(x,y) scanf("%d%d",&x,&y)
#define SCFT(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define SCFC(x) scanf("%c",&x)
#define SCFS(x) scanf("%s",x)
#define PCFLN(x) printf("%d\n",x)
#define PCF(x) printf("%d",x)
#define PF(x) printf(x)
int mat[MAXN][MAXN],c[MAXN],b[MAXN],ans=0;
void greedy(int n)
{
int k;
F(i,n)
{
SET(b,
0);
for(k=0;k<n;k++)
if(mat[i][k]&&c[k]!=-1)
b[c[k]]
=1;
for(k=0;k<n;k++)
if(!b[k]) break;
c[i]
=k;
}
F(i,n)
if(ans<c[i]) ans=c[i];
ans
++;
}
int main()
{
int n;char ss[27],sc;

while(SCF(n)!=EOF&&n)
{
int len;ans=0;
SET(ss,
'\0');SET(mat,0);SET(c,-1);
F(i,n)
{
SCFS(ss);
len
=strlen(ss);
if(len!=2)
FOR(j,
2,len-1)
{
mat[ss[
0]-'A'][ss[j]-'A']=mat[ss[j]-'A'][ss[0]-'A']=1;
}
}
//PP(n,n,mat);
greedy(n);
if(ans!=1) printf("%d channels needed.\n",ans);
else printf("%d channel needed.\n",ans);
}
}
其实就是种贪心。