【NOIP2016提高A组集训第1场10.29】完美标号
2016-10-29 14:11
495 查看
题目
给定M个二元组(A_i, B_i),求X_1, …, X_N满足:对于任意(A_i, B_i),有|X_{A_i} - X_{B_i}| = 1成立。分析
显然,对于二元组(x,y),X_{x}、X_{y}相差1,而对于二元组(x,y)和(y,z),X_{x}、X_{y}相差1,X_{z}、X_{y}相差1,而X_{x}和X_{z}有可能相等,有可能差2。
我们对于相差1的染不同的颜色,否则染相同的颜色,有冲突就输出”NO”。
发现,因为只有两种颜色,那么一种颜色输出1,另一种输出0。
#include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <queue> const int maxlongint=2147483647; const int mo=1000000007; const int N=10005; using namespace std; int last[N*30],next[N*30],to[N*30],a ,tot,n,m; int bj(int x,int y) { next[++tot]=last[x]; last[x]=tot; to[tot]=y; } int dg(int x) { for(int i=last[x];i;i=next[i]) { int j=to[i]; if(!a[j]) { a[j]=(a[x]==1)?2:1; dg(j); } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); bj(x,y); bj(y,x); } for(int i=1;i<=n;i++) { if(!a[i]) { a[i]=1; dg(i); } } for(int k=1;k<=n;k++) for(int i=last[k];i;i=next[i]) { int j=to[i]; if(a[k]==a[j]) { printf("NO\n"); return 0; } } printf("YES\n"); for(int i=1;i<=n;i++) printf("%d ",a[i]-1); }
相关文章推荐
- 【NOIP2016提高A组集训第1场10.29】完美标号
- JZOJ4822. 【NOIP2016提高A组集训第1场10.29】完美标号
- JZOJ 4822. 【NOIP2016提高A组集训第1场10.29】完美标号
- 【NOIP2016提高A组集训第1场10.29】完美标号
- 完美标号【NOIP2016提高A组集训第1场10.29】
- JZOJ 4822 【NOIP2016提高A组集训第1场10.29】完美标号
- JZOJ 4822. 【NOIP2016提高A组集训第1场10.29】完美标号
- JZOJ 4823. 【NOIP2016提高A组集训第1场10.29】小W学物理
- JZOJ 4823 【NOIP2016提高A组集训第1场10.29】小W学物理
- {题解}[jzoj4823] 【NOIP2016提高A组集训第1场10.29】小W学物理
- 【NOIP2016提高A组集训第1场10.29】小W学物理
- {题解}[jzoj4823] 【NOIP2016提高A组集训第1场10.29】小W学物理
- 【NOIP2016提高A组集训第1场10.29】小W学物理
- 小W学物理【NOIP2016提高A组集训第1场10.29】
- JZOJ 4824. 【NOIP2016提高A组集训第1场10.29】配对游戏
- JZOJ4823. 【NOIP2016提高A组集训第1场10.29】小W学物理
- 【NOIP2016提高A组集训第1场10.29】配对游戏
- 【JZOJ4824】【NOIP2016提高A组集训第1场10.29】配对游戏
- NOIP2016提高A组集训第1场【JZOJ4822】完美标号
- NOIP2016提高A组集训第1场【JZOJ4823】小W学物理