记录编号 |
141285 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HNOI 2008]神奇的国度 |
最终得分 |
100 |
用户昵称 |
Asm.Def |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.864 s |
提交时间 |
2014-11-30 16:03:42 |
内存使用 |
0.51 MiB |
显示代码纯文本
/*====================Asm.Def========================*/
#include <iostream>
#include <cctype>
#include <cstdio>
#include <vector>
using namespace std;
inline void getd(int &x){
char c = getchar();
bool minus = 0;
while(!isdigit(c) && c != '-')c = getchar();
if(c == '-')minus = 1, c = getchar();
x = c - '0';
while(isdigit(c = getchar()))x = x * 10 + c - '0';
if(minus)x = -x;
}
/*======================================================*/
const int maxn = 10002;
vector<int> adj[maxn];
int N, color[maxn] = {0}, ans = 0, adjcnt[maxn] = {0};
inline void init(){
int a, b, M;
getd(N), getd(M);
while(M--){
getd(a), getd(b);
adj[a].push_back(b);
adj[b].push_back(a);
}
}
inline void work(){
int i, j, lim, tmp = 1, Max = 0;
bool ok_col[maxn];
lim = (int)adj[1].size();
color[1] = 1;
for(i = 0;i < lim;++i)
if(!color[adj[1][i]]) ++adjcnt[adj[1][i]];
for(i = 1;i < N;++i){
Max = 0;
for(j = 1;j <= N;++j){
ok_col[j] = 1;
if(!color[j] && adjcnt[j] > Max)tmp = j, Max = adjcnt[j];
}
lim = (int)adj[tmp].size();
for(j = 0;j < lim;++j)
ok_col[color[adj[tmp][j]]] = 0;
for(j = 1;j <= N;++j) if(ok_col[j])break;
color[tmp] = j;
if(j > ans)ans = j;
lim = (int)adj[tmp].size();
for(j = 0;j < lim;++j)
if(!color[adj[tmp][j]]) ++adjcnt[adj[tmp][j]];
}
printf("%d\n", ans);
}
int main(){
freopen("bzoj_1006.in", "r", stdin);
freopen("bzoj_1006.out", "w", stdout);
init();
work();
return 0;
}