博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1006: [HNOI2008]神奇的国度
阅读量:4563 次
发布时间:2019-06-08

本文共 1424 字,大约阅读时间需要 4 分钟。

二次联通门 : 

 

 

 

 

/*    BZOJ 1006: [HNOI2008]神奇的国度    弦图    然而SB的我就是看不懂为什么要这样做QAQ    大体做法就是    从大到小扫描每个点,找出与这个点相连的度数最大的点,扔进队列里    然后将这个度数最大的点作为当前点,将于此点相连的点度数都加1    从后往前扫描队列里的元素,进行染色,每个点都染上最小的颜色就好了。*/#include 
#include
const int BUF = 12312323; char Buf[BUF], *buf = Buf;#define rg register#define Max 10009inline void read (int &n){ for (n = 0; !isdigit (*buf); ++ buf); for (; isdigit (*buf); n = n * 10 + *buf - '0', ++ buf);}inline void cmax (int &a, int b) { if (b > a) a = b; }struct E { E *n; int v; } *list[Max], poor[Max * 300], *Ta = poor;bool is[Max]; int d[Max], q[Max], k[Max], c[Max];int main (int argc, char *argv[]){ fread (buf, 1, BUF, stdin); E *e; int x, y, Answer = 0; int N, M, p, n; read (N), read (M); rg int i, j; for (i = 1, d[0] = -1; i <= M; ++ i) { read (x), read (y); ++ Ta, Ta->v = y, Ta->n = list[x], list[x] = Ta; ++ Ta, Ta->v = x, Ta->n = list[y], list[y] = Ta; } for (i = N; i >= 1; -- i) { for (j = 1, n = 0; j <= N; ++ j) if (!is[j] && d[j] > d[n]) n = j; for (is[n] = true, q[i] = n, e = list[n]; e; ++ d[e->v], e = e->n); } for (i = N; i >= 1; -- i) { for (e = list[q[i]]; e; k[c[e->v]] = i, e = e->n); for (j = 1; k[j] == i; ++ j); c[q[i]] = j; cmax (Answer, j); } printf ("%d", Answer); return 0;}

 

转载于:https://www.cnblogs.com/ZlycerQan/p/7544248.html

你可能感兴趣的文章
unity 打开文件夹并鼠标选中某文件
查看>>
TCP/IP协议 三次握手与四次挥手
查看>>
归档日志路径
查看>>
PHP制作验证码
查看>>
安卓|五大逆向软件下载
查看>>
《java基础知识》Java变量的声明、初始化和作用域
查看>>
[转]Windows Shell编程 第十五章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988016】...
查看>>
iOS Keychain,SSKeychain,使用 理解 原理
查看>>
drupal CVE-2018-7600 复现
查看>>
JAVA遇见HTML——JSP篇:JSP内置对象(上)
查看>>
Spring初始化Bean或销毁Bean前执行操作的方式
查看>>
php五大运行模式CGI,FAST-CGI,CLI,ISAPI,APACHE模式
查看>>
正则表达式的使用知识
查看>>
配置文件项目学习分享
查看>>
第三阶段 11_JavaWeb基础_Ajax技术
查看>>
SQL字符串拼接
查看>>
Promise回调地狱学习小小小小小笔记
查看>>
69A
查看>>
configure new Linux/Mac
查看>>
MTK刷机快捷键
查看>>