染色法判断二分图
给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。
请你判断这个图是否是二分图。
输入格式
第一行包含两个整数 n 和 m。
接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。
输出格式
如果给定图是二分图,则输出 Yes,否则输出 No。
数据范围
1≤n,m≤105
输入样例:
4 4
1 3
1 4
2 3
2 4
输出样例:
Yes
代码
//O(nm) #include<bits/stdc++.h> using namespace std; const int N=100010,M=200010; int n,m,e[M],ne[M],h[M],idx; int color[N]; void add(int a,int b) { e[idx]=b; ne[idx]=h[a]; h[a]=idx++; } bool dfs(int u,int c) { color[u]=c; for(int i=h[u];~i;i=ne[i]) { int j=e[i]; if(!color[j]) { if(!dfs(j,3-c)) return false; } else if(color[j]==c)return false; } return true; } int main() { //ios::sync_with_stdio(false);cin.tie(0); cout.tie(0); cin>>n>>m; memset(h,-1,sizeof h); while(m--) { int x,y; cin>>x>>y; add(x,y); add(y,x); } bool flag=true; for(int i=1;i<=n;i++) if(!color[i]) { if(!dfs(i,1)) { flag=false; break; } } if(flag) puts("Yes"); else puts("No"); system("pause"); return 0; }
一个菜鸡
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】