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(" ");
}
}
}
}
}
}

Codeforces - 1176E - Cover it! - bfs的更多相关文章

  1. Vladik and Favorite Game CodeForces - 811D (思维+BFS+模拟+交互题)

    D. Vladik and Favorite Game time limit per test 2 seconds memory limit per test 256 megabytes input ...

  2. Codeforces | CF1037D 【Valid BFS?】

    题目大意:给定一个\(n(1\leq n\leq 2\cdot10^5)\)个节点的树的\(n-1\)条边和这棵树的一个\(BFS\)序\(a_1,a_2,\dots,a_n\),判断这个\(BFS\ ...

  3. Number Clicker CodeForces - 995E(双向bfs)

    双向bfs  注意数很大  用map来存 然后各种难受....

  4. Valid BFS? CodeForces - 1037D(思维 bfs)

    我真是一只菜狗......emm... 题意: 判断一个从1开始的队列是否可以按照bfs的顺序 进行遍历..必须从1开始...然后后边依次是bfs顺序 解析: 看代码能看懂吧...emm...就是把每 ...

  5. Fair CodeForces - 987D(巧妙bfs)

    题意: 有n个城市 m条边,每条边的权值为1,每个城市生产一种商品(可以相同,一共k种),求出分别从每个城市出发获得s种商品时所走过路的最小权值 解析: 我们倒过来想,不用城市找商品,而是商品找城市, ...

  6. CodeForces 540C Ice Cave (BFS)

    题意:给定 n * m的矩阵,让你并给定初始坐标和末坐标,你只能走'.',并且走过的'.'都会变成'X',然后问你能不能在末坐标是'X'的时候走进去. 析:这个题,在比赛时就是没做出来,其实是一个水题 ...

  7. codeforces 1072D Minimum path bfs+剪枝 好题

    题目传送门 题目大意: 给出一幅n*n的字符,从1,1位置走到n,n,会得到一个字符串,你有k次机会改变某一个字符(变成a),求字典序最小的路径. 题解: (先吐槽一句,cf 标签是dfs题????) ...

  8. CodeForces - 540C Ice Cave —— BFS

    题目链接:https://vjudge.net/contest/226823#problem/C You play a computer game. Your character stands on ...

  9. Codeforces 920E(补图BFS)

    题意: n(n<=200000)个点的完全图删去了m(m<=200000)条边,求剩下图的连通分量. 分析: 将未访问过的点用一个链表串起来 仍旧进行BFS,每次BFS扩展一个点u的时候, ...

随机推荐

  1. 二、Rabbit使用-初次测试

    RabbitMQ提供了后台管理的页面,如果想使用该页面,需要进入安装rabbitmq的安装目录,运行以下cmd命令 rabbitmq-plugins enable rabbitmq_managemen ...

  2. 【错误】Publishing to Tomcat'has encountered a problem

    tomcat 启动工程时候出现 Publishing to Tomcat'has encountered a problem错误 解决方案 之后重启tomcat 就可以正常启动了

  3. 一、IIS性能检测与网站管理

    一.性能监视器 1.Windows Server自带的性能监视器.(开始 运行 perfmon ) 另一种方式打开 Performance Monitor 点击Windows+R,在Run中输入per ...

  4. 树——populating-next-right-pointers-in-each-node(填充每个节点的next指针)

    问题: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode ...

  5. chattr 改变文件的扩展属性

    1. 命令功能 chattr和lsattr用来改变文件.目录属性和查看这种文件属性:chmod只是改变文件的读.写.执行权限,更底层的属性控制是由chattr来改变. 2. 语法格式 chattr [ ...

  6. 【XSY2472】string

    题目 Description 输入文件: string.in 输出文件: string.out 给定一个由且仅由字符 'H' , 'T' 构成的字符串 \(S\) . 给定一个最初为空的字符串 \(T ...

  7. Jenkins 使用python进行调度,并下载apphost上的安装包

    在持续集成的过程中,Jenkins工具是我们必须要会用的工具,那么今天分享一个使用python对Jenkins进行调度的案例 使用的是python-jenkins 库,借用selenium登陆jenk ...

  8. 【CF1243B1】Character Swap (Easy Version)【思维】

    题意:给你两个字符串,问是否存在交换方案使得两个字符串变成一样的,方案为只交换一次且只交换s1与s2里的一个字符 题解:若一开始就相同,则存在交换方案 若一开始不同的位置为1个或大于2个,则不存在方案 ...

  9. Sklearn----使用决策树预测隐形眼镜类型

    import pandas as pd import pydotplus from sklearn.externals.six import StringIO #LabelEncoder:将字符串转换 ...

  10. python cv2在验证码识别中的使用

    使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图 ...