如果你用的是二分图染色但是只有30分
查看原帖
如果你用的是二分图染色但是只有30分
421149
how_long_can_it_be楼主2024/8/9 11:42

所有节点不一定联通,可能整个图分成了若干个互不相连的块。

所以不能只用一次bfs/dfs,而是应该针对每个联通块分别进行一次搜索。

即:

bool ok(int mid) {
	while (!q.empty()) q.pop();
	memset(clr,0,sizeof clr);
	for (int i=1;i<=n;++i)  //这里
		if (!clr[i]) {  //这里
			clr[i]=1;
			q.push(i);
			while (!q.empty()) {
				int u=q.front();q.pop();
				int c=clr[u];
				for (int i=hd[u];i;i=e[i].nxt) {
					int v=e[i].v,w=e[i].w;
					if (w<=mid) continue;
					if (clr[v]==c) return 0;
					if (clr[v]!=0) continue;
					clr[v]=-c;
					q.push(v);
				}
			}
		}
	return 1;
}
2024/8/9 11:42
加载中...