博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces - 1176E - Cover it! - bfs
阅读量:4519 次
发布时间:2019-06-08

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

久了不写bfs了。一开始用dfs写,的确用dfs是很有问题的,一些奇怪的情况就会导致多染一些色。

注意无向图的边要开双倍。

#include
using namespace std;typedef long long ll;int n, m;struct Edge { int u, v; int next; Edge() {} Edge(int u, int v, int next): u(u), v(v), next(next) {}};struct Graph { Edge edge[400005]; int head[200005], etop; void init(int n) { etop = 0; memset(head + 1, -1, sizeof(head[1])*n); } void add_edge(int u, int v) { edge[++etop] = Edge(u, v, head[u]); head[u] = etop; edge[++etop] = Edge(v, u, head[v]); head[v] = etop; }} g;bool visited[200005];bool color[200005];int dis[200005];int que[200005];int qhead, qtail;int cntodd, cnteven;void enqueue(int id, int d) { if(visited[id]) return; visited[id] = true; dis[id] = d; if(d & 1) cntodd++; else cnteven++; que[++qtail] = id;}void bfs() { memset(visited + 1, false, sizeof(visited[1])*n); qhead = 1, qtail = 0; cntodd = 0, cnteven = 0; enqueue(1, 0); while(qhead <= qtail) { int u = que[qhead++]; for(int i = g.head[u]; i != -1; i = g.edge[i].next) { enqueue(g.edge[i].v,dis[u]+1); } }}int main() {#ifdef Yinku freopen("Yinku.in", "r", stdin); //freopen("Yinku.out", "w", stdout);#endif // Yinku int t; while(~scanf("%d", &t)) { while(t--) { scanf("%d%d", &n, &m); g.init(n); for(int i = 1; i <= m; i++) { int u, v; scanf("%d%d", &u, &v); g.add_edge(u, v); } bfs(); int ch = 0; if(cntodd <= cnteven) ch = 1; int cnt = 0, last = -1; for(int i = 1; i <= n; i++) { if((dis[i] & 1) == ch) { cnt++; last = i; } } printf("%d\n", cnt); for(int i = 1; i <= n; i++) { if((dis[i] & 1) == ch) { printf("%d", i); if(i == last) { printf("\n"); break; } else { printf(" "); } } } } }}

转载于:https://www.cnblogs.com/Yinku/p/11217093.html

你可能感兴趣的文章
Spring MVC 学习总结(五)——校验与文件上传
查看>>
160505、oracle 修改字符集 修改为ZHS16GBK
查看>>
Spring 4 官方文档学习 Spring与Java EE技术的集成
查看>>
cocos+kbe问题记录
查看>>
自动化测试框架selenium+java+TestNG——配置篇
查看>>
测量标准体重
查看>>
(转)关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。...
查看>>
SQL*Plus 系统变量之32 - NEWP[AGE]
查看>>
Spring配置文件总结
查看>>
4.三角形面积
查看>>
基础-事务
查看>>
MAC下安装与配置MySQL [转]
查看>>
ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignored
查看>>
爬虫入门【10】Pyspider框架简介及安装说明
查看>>
android面试(4)---文件存储
查看>>
(转载) 标准C中的字符串操作函数
查看>>
如何提高android串口kernel log等级
查看>>
Docker快速配置指南
查看>>
Python基础---OS模块 (二)
查看>>
【JS点滴】substring和substr以及slice和splice的用法和区别。
查看>>