所有节点不一定联通,可能整个图分成了若干个互不相连的块。
所以不能只用一次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;
}