CF623A Graph and String(二分图染色)
来源:互联网 发布:安卓投屏软件 airplay 编辑:程序博客网 时间:2024/06/06 09:50
显然,如果两个点之间没有边相连,说明他们一个是a,一个是c。因此我们可以求出原图的补图,进行二分图染色。需要注意的是,如果一个点和其他所有点均连通,即在补图中为一个孤点,我们不对他进行染色,让他作为字母b.最后还要判断一下染色是否合法。(原图中相连的两点不能为a,c)
#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long long#define N 510inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,m,h[N],num=0,col[N];bool mp[N][N];struct edge{ int to,next;}data[N*N];inline void add(int x,int y){ data[++num].to=y;data[num].next=h[x];h[x]=num; data[++num].to=x;data[num].next=h[y];h[y]=num;}bool dfs(int x){ for(int i=h[x];i;i=data[i].next){ int y=data[i].to;if(col[y]==col[x]) return 0; if(col[y]!=-1) continue;col[y]=col[x]^1; if(!dfs(y)) return 0; }return 1;}int main(){// freopen("a.in","r",stdin); n=read();m=read(); while(m--){ int x=read(),y=read();mp[x][y]=mp[y][x]=1; } for(int i=1;i<=n;++i) for(int j=i+1;j<=n;++j) if(!mp[i][j]) add(i,j); memset(col,-1,sizeof(col)); for(int i=1;i<=n;++i) if(col[i]==-1){ if(!h[i]) continue;//和所有边联通,标记b col[i]=0;if(!dfs(i)){puts("No");return 0;} } for(int i=1;i<=n;++i) for(int j=i+1;j<=n;++j) if(mp[i][j]&&col[i]+col[j]==1){puts("No");return 0;} puts("Yes"); for(int i=1;i<=n;++i){ if(col[i]==0) putchar('a'); else if(col[i]==-1) putchar('b'); else putchar('c'); }return 0;}
阅读全文
0 0
- CF623A Graph and String(二分图染色)
- Codeforces 624C:Graph and String 二分图染色
- CodeForces 624C Graph and String(二分图染色)
- AIM Tech Round (Div. 2) C. Graph and String(二分图染色 | 贪心)
- AIM Tech Round (Div. 2)C - Graph and String(二分图染色)
- cf#AIM Tech Round -C. Graph and String-贪心/ 二分图染色
- AIM Tech Round (Div. 2) C. Graph and String 二分图染色
- #AIM Tech Round [div2] C. Graph and String 【连通图、染色】
- hdu5313 Bipartite Graph(二分图染色+dp+位运算)
- [HDU 5313] Bipartite Graph 二分图染色+分组背包
- hdu5313Bipartite Graph(二分图染色+DP(bitset优化))
- hdu 5313 Bipartite Graph(二分图染色+dp+bitset优化)
- cf623a
- CF624C - Graph and String
- codeforces 557D Vitaly and Cyclef(二分图染色)
- HDU 5285 wyh2000 and pupil(染色法判断二分图)
- hdu5258 wyh2000 and pupil(二分图染色)
- cf #311 D. Vitaly and Cycle (二分图染色)
- 数据库SQL优化大总结之 百万级数据库优化方案
- Binary Selection Sort(二元选择排序)
- Mybatis if clause
- 深入理解Spring系列之十:DispatcherServlet请求分发源码分析
- 关于license
- CF623A Graph and String(二分图染色)
- 检验The Gauss-Bonnet Theorem
- Docker入门
- shell编程,正则表达式介绍,grep命令的使用
- JAVA学习总结之Map集合
- Jetson TX2刷机及安装tensorflow gpu注意事项
- HMM(隐马尔科夫)用于中文分词
- 微信公众号语音解析
- 使用JavaMail创建邮件和发送邮件