# BZOJ1098 [POI2007]办公楼biu

 1 /**************************************************************
2     Problem: 1098
3     User: rausen
4     Language: C++
5     Result: Accepted
6     Time:5708 ms
7     Memory:34108 kb
8 ****************************************************************/
9
10 #include <cstdio>
11 #include <algorithm>
12
13 using namespace std;
14 const int N = 100005;
15 const int M = 4000005;
16
17 struct edges{
18     int next, to;
19     edges() {}
20     edges(int a, int b) : next(a), to(b) {}
21 }e[M];
22
23 int n, m, ans;
24 int first[N], tot;
25 int q[N], l, r;
26 int pre[N], next[N], a[N];
27 bool to[N];
28
30     int x = 0;
31     char ch = getchar();
32     while (ch < '0' || ch > '9')
33         ch = getchar();
34     while (ch >= '0' && ch <= '9'){
35         x = x * 10 + ch - '0';
36         ch = getchar();
37     }
38     return x;
39 }
40
41 void add_Edges(int x, int y){
42     e[++tot] = edges(first[x], y), first[x] = tot;
43     e[++tot] = edges(first[y], x), first[y] = tot;
44 }
45
46 inline void del(int x){
47     int tmp = pre[x];
48     next[tmp] = next[x];
49     pre[next[x]] = tmp;
50 }
51
52 void bfs(int p){
53     q[0] = p;
54     int now, x;
55     for (l = r = 0; l <= r; ++l){
56         ++a[ans];
57         now = q[l];
58         for (x = first[now]; x; x = e[x].next)
59             to[e[x].to] = 1;
60         for (x = next[0]; x <= n; x = next[x])
61             if (!to[x])
62                 del(x), q[++r] = x;
63         for (x = first[now]; x; x = e[x].next)
64             to[e[x].to] = 0;
65     }
66 }
67
68 int main(){
70     int i, x, y;
71     for (i = 0; i <= n; ++i)
72         next[i] = i + 1, pre[i + 1] = i;
73     for (i = 1; i <= m; ++i){
76     }
77     for (i = next[0]; i <= n; i = next[0])
78         del(i), ++ans, bfs(i);
79     printf("%d\n", ans);
80     sort(a + 1, a + ans + 1);
81     for (i = 1; i <= ans; ++i)
82         printf("%d ", a[i]);
83     return 0;
84 }
View Code

posted on 2014-11-14 16:46  Xs酱~  阅读(247)  评论(0编辑  收藏  举报