constint N =1e5+10, M =2* N;int e[M], ne[M], h[N], n, m, idx =0, color[N];voidadd(int a,int b){e[idx]= b; ne[idx]= h[a]; h[a]= idx++;}booldfs(int u,int c){color[u]= c;// 染色该点for(int i = h[u]; i !=-1; i = ne[i]){int j = e[i];if(color[j]==0){// 染色其连通点,如果存在染色矛盾,立即返回falseif(dfs(j,3- c)==false)returnfalse;}// 发生颜色矛盾,连通点的颜色相同elseif(color[j]== c)returnfalse;}returntrue;// 对连通点的染色过程未发生矛盾}intmain(){fill(h, h + N,-1);cin >> n >> m;while(m--){int a, b;cin >> a >> b;add(a, b);add(b, a);}bool flag =true;for(int i =1; i <= n;++i){if(color[i]==0)flag =dfs(i,1);if(flag ==false)break;}if(flag)cout <<"Yes";elsecout <<"No";return0;}
匈牙利算法求二分图最大匹配
constint N =510, M =1e5+10;int n1, n2, m, h[N], e[M], ne[M], idx =0;int match[N];bool visited[N];voidadd(int a,int b){e[idx]= b; ne[idx]= h[a]; h[a]= idx++;}intfind(int u){for(int v = h[u]; v !=-1; v = ne[v]){int j = e[v];if(visited[j]==false){// 若j已有匹配,试找与其匹配的点visited[j]=true;// 是否还有其他相连通且未发生匹配的点if(match[j]==0||find(match[j])){match[j]= u;returntrue;}}}returnfalse;}intmain(){fill(h, h + N,-1);cin >> n1 >> n2 >> m;while(m--){int a, b;cin >> a >> b;add(a, b);}int ret =0;for(int i =1; i <= n1;++i){fill(visited, visited + N,false);// 每次查询一个点的匹配,都要置空if(visited[i]==false)// match保证了已匹配的点的状态{if(find(i))ret++;}}cout << ret;return0;}
第三届大数据、区块链与经济管理国际学术会议 (ICBBEM 2024)
The 3rd International Conference on Bigdata Blockchain and Economy Management
第三届大数据、区块链与经济管理国际学术会议(ICBBEM 2024),将于2024年3月22-24日在中国南昌召开。大会由江西科技师…