https://codeforc.es/contest/1176/problem/E

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

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

#include<bits/stdc++.h>
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(" ");
}
}
}
}
}
}

最新文章

  1. URL
  2. java学习笔记(3):网络编程
  3. JavaWeb基础: ServletContext
  4. Java web 之表单验证
  5. FIREDAC调用中间件远程方法查询数据示例
  6. PHP中的魔术方法总结
  7. Java 读取Properties 配置文件
  8. [BZOJ 1045] [HAOI2008] 糖果传递
  9. 使用hibernate更新数据库记录的信息的相关学习记录
  10. iOS 从网络获取son并解析
  11. Delphi检测网络连接状态
  12. XCL-Charts绘画面积图(AreaChart) 案件1
  13. Scala对MongoDB的增删改查操作
  14. break 和continue在循环中起到的作用
  15. 关于Vue的两层for循环
  16. Python-数据库 基本SQL语句
  17. Linux - 快速进入目录的方法
  18. 微信小程序日历课表
  19. sublime text3:提示 There are no packages available installation 解决方案
  20. 创建mysql数据库并指定编码

热门文章

  1. selenium下拉一个框内的滚动条
  2. 1145. Hashing - Average Search Time (25)
  3. Redis分布式锁【实战】
  4. .iml文件恢复
  5. nbench
  6. bzoj4543 [POI2014]Hotel加强版 长链剖分+树形DP
  7. Java常用类库API之数字处理工具类
  8. Python---基础---dict和set
  9. NOIP2015 提高组 Day T3 斗地主
  10. @ControllerAdvice全局数据预处理